错误: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的快速解决办法是Android应用开发中常见的问题。findViewById是Android中获取界面元素对象的方法,但是有时候它会返回null,...
总结:findViewById返回为空null的原因是没有在索要find的子视图的Parent中去找,或者是当前视图控件下面没有包含对应的想要找的视图控件,从而导致找不到,返回null。解决方法是找到要找的视图控件的parent或root...
在控件ID正确的情况下,检查是否在实例化布局...View view = null; @Override @SuppressLint(HandlerLeak) public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
如果控件不存在于当前 View 对象中,findViewById 方法将返回 null。 在上面的部分内容中,我们可以看到作者遇到了 findViewById 返回为空的问题。作者在 Activity 中使用 findViewById 来获取控件,但是返回的是 ...
Button exitButton = findViewById(R.id.exit_button); exitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().getSupportFragmentManager()....
//得到当期的返回类型 int type = getItemViewType(position); if (convertView == null) { switch (type) { case TYPE_1: convertView = View.inflate(MainActivity.this, R....
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....
null, null, null, null, null); return this.convertToPeople(results);//将results传给convertToPeople方法中的形参,并将peoples数组的值返回 } public People_mll[] queryIdData(long id){//定义一个类型...
1. **实例化布局**: 与`findViewById()`不同,`LayoutInflater`是用来加载整个XML布局文件,而不是单个视图控件。通过`inflate()`方法,它可以将XML布局转换为`View`或`ViewGroup`对象,这对于构建复杂的界面或动态...
在这个例子中,我们首先通过`findViewById`方法找到`TextView`和`Button`的实例,然后为`Button`设置一个点击监听器。当用户点击按钮时,`onClick`方法会被调用,`clickCount`增加1,并更新`TextView`的文本,显示...
这两种方式在实际使用中没有本质区别,它们都会返回与当前设备配置相匹配的 `LayoutInflater` 实例。 总结来说,`setContentView()` 主要用于初始化 Activity 的布局,而 `inflate()` 用于动态加载布局到内存中,...
从名字上来理解, getParent() 是获得它的父View,如果他没有父View返回null。 举个栗子: 这里我在约束布局里定义了一个ImageView。我使用getParent()看一下结果 view=findViewById(R.id.image) //ImageView 对象...
但需要注意的是,只有当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类 ...