布局文件大致是这样的结构:
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资源,二者有什么不同?谢谢解答!
解决方案 »
- 求教,DialogInterface cannot be resolved to a type
- 使用自定义的SimpleAdapter,内容由数据库读取生成的listiew如何更新
- 哪位高手能给安指点下这个音乐播放器怎么添加seekbar实现声音和进度同步
- 询问关于Android二次开发
- 有个师兄让我参加他的项目,但是我不知道是否我能胜任?想让大家参考下
- 咨询一个如何通过手机向服务器上传数据的问题?http or sock?
- 神奇的91理财软件,支持Android
- 刚学android不久,请教个ViewPager用法,出错了,不会改,望赐教。。
- 开源Imageloaderlibary异步记载图片出现重复
- Android Studio编译失败:对findViewById的引用不明确
- 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); //对!!