Kotlin开发OTP验证时setOnClickListener的else分支不生效求助
问题原因
你的代码问题出在输入框内容的读取时机错误:
你在onCreate生命周期回调里就直接读取了4个EditText的text值并转成字符串存储,此时页面刚完成渲染,输入框还没有被用户输入内容,所以你存的inputCode1到inputCode4四个变量永远都是初始的空字符串,哪怕后面用户输入了内容,这几个变量的值也不会自动更新。你点击按钮时判断的一直是初始的空值,所以永远会触发空校验的Toast。
修复方案
把读取输入框内容的逻辑挪到按钮点击事件的内部,每次点击按钮时再实时读取当前输入框的内容即可,修复后的代码如下:
class GetOTP : AppCompatActivity() { // 提示:类名建议遵循大驼峰命名规范,把getOTP改成GetOTP更符合Kotlin开发规范 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_get_otp) // 只在onCreate里初始化控件引用,不要提前读取输入内容 val inputCode1 = findViewById<EditText>(R.id.inputCode1) val inputCode2 = findViewById<EditText>(R.id.inputCode2) val inputCode3 = findViewById<EditText>(R.id.inputCode3) val inputCode4 = findViewById<EditText>(R.id.inputCode4) val verifyOTPButtonOne = findViewById<Button>(R.id.verifyOTPButtonOne) verifyOTPButtonOne.setOnClickListener { // 点击按钮时再实时读取当前输入框的最新内容 val code1 = inputCode1.text.toString() val code2 = inputCode2.text.toString() val code3 = inputCode3.text.toString() val code4 = inputCode4.text.toString() if(code1.isEmpty() || code2.isEmpty() || code3.isEmpty() || code4.isEmpty()){ Toast.makeText(applicationContext,"请输入正确的OTP",Toast.LENGTH_SHORT).show() } else { val intent = Intent(this, VerifySuccess::class.java) startActivity(intent) } } } }
可选优化点
- 给输入框添加
android:inputType="number"属性,限制只能输入数字,避免用户输入无效字符 - 给四个输入框添加输入自动跳位逻辑,输完第一个输入框的内容后自动聚焦到第二个输入框,提升使用体验
内容的提问来源于stack exchange,提问作者harsh.rupapara141
相关产品推荐
相关产品推荐

