免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 758 | 回复: 0

无法通过资源ID获得资源对象解决办法 [复制链接]

论坛徽章:
0
发表于 2011-12-22 08:51 |显示全部楼层

前两天写日历程序的时候,碰到一个问题:就是通过函数findViewByid(int id)所得到的对象指针总是为NULL,
瞎折腾了一上午,最后确发现自己犯了一个很低级的错误,也是我这样的新手可能会轻易犯的错误,现记录在此。

代码:
  1. 1. package com.android.test.firstActivityAct;
  2.    2.

  3.    3. import android.app.Activity;
  4.    4. import android.os.Bundle;
  5.    5. import android.util.Log;
  6.    6. import android.widget.TextView;
  7.    7.

  8.    8. public class FirstActivityActActivity extends Activity {
  9.    9. /** Called when the activity is first created. */
  10.   10. @Override
  11.   11. public void onCreate(Bundle savedInstanceState) {
  12.   12. super.onCreate(savedInstanceState);
  13.   13. //setContentView(R.layout.main);
  14.   14.
  15.   15. //通过资源ID获取文本对象
  16.   16. TextView textview =(TextView)findViewById(R.id.textview01);
  17.   17. textview.setText("This is my first Android application!");
  18.   18.
  19.   19. if(textview == null){
  20.   20. Log.d(getClass().getName(),"Get text view failed!");
  21.   21. return;
  22.   22. }
  23.   23.
  24.   24. //设置内容视图
  25.   25. setContentView(R.layout.main);
  26.   26.
  27.   27. }
若如上代码,执行程序后 textview = null;

正确方法应该是将25行代码setContentView(R.layout.main);放到13行 处,即在16前面,才能正确获得文本
对象。

前者为什么通过“findViewById"方法 无法通过已经定义好的资源ID来获取该资源对象。实际上通过Android
SDK文档,就可以看出端倪。

对于“findViewById"方法的ID参数,必须是“onCreate(Bundle)"函数处理过的XML文件。也就是说,该ID不能
一经过定义就可以使用,而是需要等“onCreate"函数对XML文件进行处理之后。

而在“onCreate(Bundle)“函数中,需要先调用“setContentView(int)”方法来填充Activity的用户界面。而
”setContentView(int)"方法的作用是:填充ID所指定的布局资源,将该资源中定义的高级可视组件添加到
Activity中。

现在应该明白了:要使用一个布局内的组件,必须先通过“setContentView(in)"方法来填充该布局资源。也就是
说,fingViewById方法必须在“setContentView(int)”方法之后调用。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP