为什么MainActivity.kt的setOnClickListener中无法获取AppCompatEditText的文本
问题原因
你当前代码同时混用了View Binding和已废弃的Kotlin Android Extensions(合成视图绑定),两者冲突导致无法正确获取输入框实例,因此读取到的文本始终为null。
你之前给et_name加空安全调用后直接进入else分支的原因是:et_name本身为null,et_name?.text返回null,对null调用toString()会得到固定字符串"null",该字符串不为空,因此isEmpty()判断结果为false,直接触发else分支逻辑。
修复方案
- 首先删除MainActivity.kt中冗余的合成视图绑定导入语句:
import kotlinx.android.synthetic.main.activity_main.*
- 所有视图引用统一使用已初始化的
binding对象,视图id会自动由下划线命名转为驼峰命名:- 按钮引用从
btn_start改为binding.btnStart - 输入框引用从
et_name改为binding.etName
- 按钮引用从
修改后的完整代码
package com.example.quizapp import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Toast import com.example.quizapp.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN binding.btnStart.setOnClickListener { val userName = binding.etName.text?.toString()?.trim() ?: "" if (userName.isEmpty()) { Toast.makeText(this@MainActivity, "请输入姓名", Toast.LENGTH_SHORT).show() } else { val intent = Intent(this@MainActivity, QuizQuestionsActivity::class.java) // 可选:将用户名传递到答题页面,符合原教程逻辑 intent.putExtra("USER_NAME", userName) startActivity(intent) finish() } } } }
内容的提问来源于stack exchange,提问作者Uttaran Das
相关产品推荐
相关产品推荐

