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

为什么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分支逻辑。

修复方案

  1. 首先删除MainActivity.kt中冗余的合成视图绑定导入语句:
import kotlinx.android.synthetic.main.activity_main.*
  1. 所有视图引用统一使用已初始化的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:04