You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Android:如何从首个Activity传值到次Activity设置TextView文本

问题原因排查

你之前给手机号TextView赋值不生效主要有两个问题:

  1. 没有在OTP发送接口请求成功后,将用户输入的手机号存入ObjectSingleton.mobileNum单例变量,单例为空自然赋值无效
  2. 没有在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:18:02