`
sxdsly
  • 浏览: 11497 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

findViewById返回Null

阅读更多

错误:findViewById返回Null,报nullpointer错误

网上搜了下,总结原因,一般为一下几种:

 

1.在另一个view的元素应该用baseView.findViewById()来拿

findViewById()是要指定view的,如果在该view下找不到,自然报null。平时注意养成写view.findViewById()的习惯就不容易错了。

 

2.findViewById在setContentView(R.layout.main);之前.

即在setContentView调用之前,调用了findViewById去找main布局中的界面元素lv_contactbook,那么所得到的lv一定是null。正确的做法是将上面代码中加粗的哪一行,挪至setContentView方法调用之后即可。

 

3. 使用了id的旧风格

通过findViewById()获取一个Button时一直返回null值,百思不得其解。最后发现是因为在layout文件中使用了id的旧风格,如下所示:

<Button id="@+id/btn_ok" />

改成android:id就成功了。

 

<Button android:id="@+id/btn_ok" />

4. 没有重写BottomTab方法 (这个情况还没遇到,网上有人提到这种情况,欢迎验证一下)

自定义View 的时候 必须重写以下方法

 public BottomTab(Context context, AttributeSet attrs) {    super(context, attrs);

}

5.clean一下工程,让ID重新生成

这种情况是调用LayoutInflater.inflate将布局xml规定的内容转化为相应的对象。比如有rowview.xml布局文件(比如在自定义Adapter的时候,用作ListView中的一行的内容的布局),假定在自定的Adapter的getView方法中有类似如下的代码:
View rowview = (View)inflater.inflate(R.layout.rowview, parent, false);
TextView tv_contact_id =(TextView)rowview.findViewById(R.id.tv_contact_id);
TextView tv_contactname =(TextView)rowview.findViewById(R.id.tv_contactname);

有时候居然也会发现rowview非空,但tv_contact_id和tv_contactname都是null!仔细看代码,怎么也看不出错误来。到底是什么原因造成的呢?答案是Eclipse造成的,要解决这个问题,需要这个项目clean一次(Project菜单 -> Clean子菜单),这样就OK了。

 

 

 

分享到:
评论

相关推荐

    AndroidGUI27中findViewById返回null的快速解决办法

    AndroidGUI27中findViewById返回null的快速解决办法 AndroidGUI27中findViewById返回null的快速解决办法是Android应用开发中常见的问题。findViewById是Android中获取界面元素对象的方法,但是有时候它会返回null,...

    Android中findViewById返回为空null的快速解决办法

    总结:findViewById返回为空null的原因是没有在索要find的子视图的Parent中去找,或者是当前视图控件下面没有包含对应的想要找的视图控件,从而导致找不到,返回null。解决方法是找到要找的视图控件的parent或root...

    android getActivity.findViewById获取ListView 返回NULL的方法

    在控件ID正确的情况下,检查是否在实例化布局...View view = null; @Override @SuppressLint(HandlerLeak) public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    Android中findViewById获取控件返回为空问题怎么解决

    如果控件不存在于当前 View 对象中,findViewById 方法将返回 null。 在上面的部分内容中,我们可以看到作者遇到了 findViewById 返回为空的问题。作者在 Activity 中使用 findViewById 来获取控件,但是返回的是 ...

    点击退出返回上一个Fragment

    Button exitButton = findViewById(R.id.exit_button); exitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().getSupportFragmentManager()....

    ListView多条目显示

    //得到当期的返回类型 int type = getItemViewType(position); if (convertView == null) { switch (type) { case TYPE_1: convertView = View.inflate(MainActivity.this, R....

    Android中生成二维码、扫描二维码

    ImageView imageView = findViewById(R.id.qr_code_view); imageView.setImageBitmap(bitmap); ``` 二、扫描二维码 1. 添加权限:在AndroidManifest.xml文件中,需要添加相机访问权限: ```xml ``` 2. 创建...

    安卓获取系统时间,动态显示,点击返回弹出对话框

    TextView timeView = findViewById(R.id.time_view); Handler handler = new Handler(); Runnable updateTask = new Runnable() { @Override public void run() { timeView.setText(currentTimeStr); handler....

    SQLiteDemo

    null, null, null, null, null); return this.convertToPeople(results);//将results传给convertToPeople方法中的形参,并将peoples数组的值返回 } public People_mll[] queryIdData(long id){//定义一个类型...

    android中LayoutInflater的使用.pdf

    1. **实例化布局**: 与`findViewById()`不同,`LayoutInflater`是用来加载整个XML布局文件,而不是单个视图控件。通过`inflate()`方法,它可以将XML布局转换为`View`或`ViewGroup`对象,这对于构建复杂的界面或动态...

    TextView和Button的结合使用:点击按钮,返回点击次数

    在这个例子中,我们首先通过`findViewById`方法找到`TextView`和`Button`的实例,然后为`Button`设置一个点击监听器。当用户点击按钮时,`onClick`方法会被调用,`clickCount`增加1,并更新`TextView`的文本,显示...

    Android开发中setContentView和inflate的区别分析

    这两种方式在实际使用中没有本质区别,它们都会返回与当前设备配置相匹配的 `LayoutInflater` 实例。 总结来说,`setContentView()` 主要用于初始化 Activity 的布局,而 `inflate()` 用于动态加载布局到内存中,...

    getParent()与getRootView()

    从名字上来理解, getParent() 是获得它的父View,如果他没有父View返回null。 举个栗子: 这里我在约束布局里定义了一个ImageView。我使用getParent()看一下结果 view=findViewById(R.id.image) //ImageView 对象...

    Fragment获取父Activity的TextView控件并修改内容

    但需要注意的是,只有当Fragment的状态是`ActivityCreated`之后,`getActivity()`才不会返回null,因此这个操作应该在Fragment的`onActivityCreated()`或`onViewCreated()`方法中进行。 ```java @Override public ...

    实现微信对话列

    3. `getItemId(int position)`: 返回对应位置的消息ID,通常返回位置即可。 4. `getView(int position, View convertView, ViewGroup parent)`: 这是关键的方法,它负责根据消息类型生成对应的视图。在这里,我们...

    百度地图 定位城市或者详细信息

    定位城市或者详细信息百度地图act_person_location = (TextView) findViewById(R.id.act_person_location); mLocationClient = new LocationClient(context.getApplicationContext()); //声明LocationClient类 ...

Global site tag (gtag.js) - Google Analytics