ListView适配器调用getTag()触发空指针,App启动即崩溃
问题根源与修复方案
你的NullPointerException问题出在**inflateRequires方法的返回值错误**,这直接导致getView方法拿到的是null视图,后续调用view.getTag()自然触发空指针异常。
具体错误点
看你的inflateRequires方法:
private View inflateRequires(View view){ if (view == null){ view = inflater.inflate(R.layout.view_beacon_info,null,false); view.setTag(new ViewHolder(view)); } return null; // 这里是致命错误! }
你在方法最后返回了null,而不是已经初始化好的view对象。不管view是否为null,这个方法都会返回null,导致getView里的convertView被赋值为null,随后传递给bind方法的view就是null,调用view.getTag()必然崩溃。
修复后的代码
只需要把inflateRequires方法的返回值改成view即可:
private View inflateRequires(View view){ if (view == null){ view = inflater.inflate(R.layout.view_beacon_info,null,false); view.setTag(new ViewHolder(view)); } return view; // 返回初始化后的view }
额外优化建议
- 布局填充时,建议传入父容器
parent并设置attachToRoot为false,这样可以继承父容器的布局参数:view = inflater.inflate(R.layout.view_beacon_info, parent, false); - 可以给
ViewHolder的字段加上private修饰符,通过getter方法访问,符合封装原则。
内容的提问来源于stack exchange,提问作者TMN167
相关产品推荐
相关产品推荐

