Kotlin Android:如何从首个Activity传值到次Activity设置TextView文本
问题原因排查
你之前给手机号TextView赋值不生效主要有两个问题:
- 没有在OTP发送接口请求成功后,将用户输入的手机号存入
ObjectSingleton.mobileNum单例变量,单例为空自然赋值无效 - 没有在
OtpValidationActivity的onCreate生命周期中,主动调用方法给id为mobileNum的TextView赋值
具体修改方案
第一步:修改MobileNumberActivity的接口成功回调逻辑
同时使用Intent传参+单例存储两种方式传递手机号,避免数据丢失:
override fun ifSuccess(res: OtpData) { errorMsg.setText("Sent!") val inputMobile = inputText.text.toString() // 先存到单例 ObjectSingleton.mobileNum = inputMobile val intent = Intent(this, OtpValidationActivity::class.java) // 用Intent附带参数传值,更稳定 intent.putExtra("USER_INPUT_MOBILE", inputMobile) startActivity(intent) }
第二步:修改OtpValidationActivity的onCreate逻辑,给手机号TextView赋值
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_otp_verification) otpPresenter = OtpPresenter() otpPresenter.otpValidationViews = this // 优先从Intent取手机号,取不到再用单例兜底 val userMobile = intent.getStringExtra("USER_INPUT_MOBILE") ?: ObjectSingleton.mobileNum // 给布局中的手机号TextView赋值 mobileNum.text = userMobile // 如果需要加国家码前缀可以改成以下写法,比如菲律宾+63: // mobileNum.text = "+63 $userMobile" verifyOtpBtn.setOnClickListener { if (otp_input.text.isNullOrEmpty()) { otp_input.error = "Please enter OTP." } else{ val otpNumber = otp_input.text.toString() otpPresenter.otpValidate(userMobile,otpNumber) } } }
补充注意事项
- 提前确认
ObjectSingleton中的mobileNum变量为可写的非空String类型,避免空指针异常 - 如果接口返回的OtpData中包含格式化后的手机号,也可以直接取返回值赋值,和用户输入的做二次校验
内容的提问来源于stack exchange,提问作者Lovely Joy Figueras
相关产品推荐
相关产品推荐

