【Android】使用findViewById()返回空值的解决办法

问题

当我们想在java代码中实例化xml的某个组件(比如Button)时,有时候会出现空指针异常,也就是
findViewById(R.id.button_id)返回值为空。

问题分析

首先,在onCreate函数中,我们先前调用的setContentView(R.layout.exam_xml)说明了本类将layout文件夹中的exam_xml.xml文件实例化成了view,该view属于本类的默认view,使用this即可调用。

其次,findViewById() 函数的完全格式为view.findViewById(R.id.yourid),如果要调用exam_xml中的控件的话,可以写成this.findViewById(R.id.yourid)所以又可以再一步简化,将this去掉,写成了网上大多数教程中的findViewById(R.id.yourid)格式。

所以到这里就明白了,我们调用的button_id不在exam_xml中,findViewById()在exam_xml的view中找不到button_id,所以返回了view

解决办法

所以我们需要使用view.findViewById(R.id.yourid)的格式,实例化出我们的组件了。view怎么得出来?请看下面的代码。

LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);  //使用LayoutInflater寻找layout下的xml文件

View secondary_v = inflater.inflate(R.layout.secondary, null);  //将mybutton所在的的xml文件secondary.xml转换成view对象

Button serverButton = (Button) secondary_v.findViewById(R.id.mybutton);  //使用完整形式实例化Button

参考资料:
问题贴https://bbs.csdn.net/topics/390354932 中第17楼

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注