Android开发:为何Activity中findViewById()无法获取用户输入值?
findViewById()无法获取用户输入的值? 我来帮你排查下可能的原因哈,这种情况通常是这几个细节没做好导致的:
没有正确加载布局文件
你得先确保在Activity的onCreate()方法里调用了setContentView(R.layout.activity_sign_up_login),而且布局文件名完全正确。如果没做这一步,Activity根本不知道要加载哪个布局,findViewById()自然找不到对应的输入控件,更别说获取值了。调用
findViewById()的时机太早
必须等布局加载完成后再去获取控件实例。比如你要是在onCreate()调用setContentView()之前就调用findViewById(),这时候控件还没被初始化,返回的是null,后续调用getText()肯定会出问题,更拿不到输入值。一定要把获取控件的代码放在setContentView()之后。控件ID不匹配
检查下布局XML里输入控件(比如EditText)的android:id属性,和你代码里findViewById(R.id.xxx)里的ID是不是完全一致。比如布局里写的是@+id/et_email,代码里却写成R.id.et_mail,这种拼写错误会导致你拿到的不是用户输入的那个控件,自然获取不到值。忘记调用
getText()获取输入内容
就算你正确拿到了EditText的实例,要是直接用控件本身而不是调用getText().toString(),那肯定拿不到用户输入的文本。比如你得这么写:EditText usernameEt = findViewById(R.id.et_username); String username = usernameEt.getText().toString();别漏了
getText().toString()这一步哦。使用了View/Data Binding却混用
findViewById()
如果你的项目已经配置了View Binding或者Data Binding,还手动用findViewById()可能会出现冲突,或者你没正确初始化绑定对象。这种情况下建议直接用绑定库的方式获取控件,比如View Binding会生成对应的绑定类,通过绑定对象来访问控件,比findViewById()更可靠。
内容的提问来源于stack exchange,提问作者Spandana Krishnan

