布局文件大致是这样的结构:
activity_main.xml
<LinearLayout
android:id="@+id/main_layout">
<Button
android:id="@+id/start_button">代码是这样的
setContentView(R.layout.activity_main);//这句可用
button = (Button) findViewById(R.id.start_button);//这句也没问题
mainView = findViewById(R.id.main_layout);//这句会返回空指针请教:
1,同样的通过id来查找view对象,为什么第三行会返回null?
2,xml布局文件生成的R.layout.activity_main资源和文件内容生成的R.id.main_layout资源,二者有什么不同?谢谢解答!
activity_main.xml
<LinearLayout
android:id="@+id/main_layout">
<Button
android:id="@+id/start_button">代码是这样的
setContentView(R.layout.activity_main);//这句可用
button = (Button) findViewById(R.id.start_button);//这句也没问题
mainView = findViewById(R.id.main_layout);//这句会返回空指针请教:
1,同样的通过id来查找view对象,为什么第三行会返回null?
2,xml布局文件生成的R.layout.activity_main资源和文件内容生成的R.id.main_layout资源,二者有什么不同?谢谢解答!
解决方案 »
- 关于MediaPlayer无法停止
- 为什么Android中的R文件不随着其它文件的更改而更新数据
- 在安卓下安装CP2102(Usb转串口芯片)驱动,需要具备什么样的条件
- android SharedPreferences存储问题
- android这个控件是什么
- 如何用C++访问android的assets中的文件,请高手们帮忙?
- 浏览器能否启动程序
- resolveService()返回值如何排序
- 通过jni移植pjsip协议到android上出现error: undefined reference to 'srand'
- 安卓如何实现数学公式+文本的题干以及答案?
- Android系统如何判断是否开机
- ViewPager加载activity内容不显示
2.R.layout代表整个资源文件。R.id只是引用某表控件
多谢回答。
1,确实为null了,我也很奇怪。
2,我想问的就是引用整个布局资源和引用某控件有什么区别?是不是理论上都可用setContentView()?
2.其实意义是一样的。
setContentView(R.layout.activity_main);//可以正常工作
setContentView(R.id.main_layout);//抛出异常,android.content.res.Resources$NotFoundException问题1,对于setContentView来说,他俩有什么区别?以及,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainView1 = (LinearLayout)findViewById(R.id.main_layout);//在setContentView之前,是null
setContentView(R.layout.activity_main);
mainView2 = (LinearLayout)findViewById(R.id.main_layout);//在setContentView之后,正常获取
}问题2,setContentView前后有什么区别?如果我不打算set,直接从布局资源生成一个view,应该用什么方法?
2、setContentView以后,findViewById会在根据activity_main布局生成的View中去找id为main_layout的组件,在setContentView之前调用findViewById,基本的View都没有,根本无从找起,当然是null了
建议仔细的看一下Android Activity相关类的源代码,看google的源码,很多东西就一目了然了
原来获取布局对象不能用布局资源id,必须用id的id LinearLayout lay1=(LinearLayout)findViewById(R.layout.xerllent_main) //错!!
LinearLayout lay1=(LinearLayout)findViewById(R.id.xerllent_main); //对!!