ViewHolder模式获取控件空指针异常,小错误很坑爹

原创 2014年07月23日 09:05:08

在用ListView做开发的时候需要集成BaseAdapter类,复写其getView方法,这个想必大家都是知道的。今天在调试的时候偏偏让我遇到一个很折腾人的问题,在ViewHolder模式是用以下方式给TextView控件赋值时报空指针异常:

public View getView(int position, View convertView, ViewGroup parent) {  
ViewHolder holder = null;  
if(holder == null)  
{  
holder = new ViewHolder();  
if(convertView == null)  
{  
convertView = mInflater.inflate(R.layout.inbox_listitem, null);  
System.out.println("convertView----------------->"+convertView);  
}  
holder.image = (ImageView)findViewById(R.id.connecter_image);  
holder.nametxt = (TextView)findViewById(R.id.connecter_name);  
holder.messagetxt = (TextView)findViewById(R.id.connect_message);  
System.out.println("holder.image----->"+holder.image);//此处出现空指针  
System.out.println("holder.nametxt ---->"+holder.nametxt);//此处出现空指针  
System.out.println("holder.messagetxt ---->"+holder.messagetxt);//此处出现空指针  
convertView.setTag(holder);  
}else  
{  
holder = (ViewHolder) convertView.getTag();  
}  
System.out.println("position------------------->" +position);  
System.out.println("mSmsPic.get(position)------------->" +mSmsPic.get(position));  
System.out.println("mContactsName.get(position)------------->" +mContactsName.get(position));  
System.out.println("mContactsmessage.get(position)------------->" +mContactsmessage.get(position));  
holder.image.setImageBitmap(mSmsPic.get(position));  <span style="font-family: simsun;">//此处出现空指针</span>
holder.nametxt.setText(mContactsName.get(position));  <span style="font-family: simsun;">//此处出现空指针</span>
holder.messagetxt.setText(mContactsmessage.get(position));   <span style="font-family: simsun;">//此处出现空指针</span>
return convertView;  
}  


怎么调试都无效,最后被逼无奈改用SimpleAdapter……可是,问题还是在心里纠结着!!BaseAdapter也不是第一次用了,参照以前的code居然也没发现问题,其实还是蛮明显的(都怪老眼昏花,欲哭无泪啊!),都是疏忽大意惹的祸!!

今天闲了,根据现象,百度了一下…… 结果,坑爹啊,原来原因就少添加了一个convertView。参见下面代码:

public View getView(int position, View convertView, ViewGroup parent) {  
ViewHolder holder = null;  
if(holder == null)  
{  
holder = new ViewHolder();  
if(convertView == null)  
{  
convertView = mInflater.inflate(R.layout.inbox_listitem, null);  
System.out.println("convertView----------------->"+convertView);  
}  
holder.image= (ImageView)<span style="color:#ff0000;">convertView</span>.findViewById(R.id.connecter_image);  
holder.nametxt =(TextView)<span style="color:#ff0000;">convertView</span>.findViewById(R.id.connecter_name);  
holder.messagetxt = (TextView) <span style="color:#ff0000;">convertView</span>.findViewById(R.id.connect_message);  
System.out.println("holder.image----->"+holder.image);  
System.out.println("holder.nametxt ---->"+holder.nametxt);  
System.out.println("holder.messagetxt ---->"+holder.messagetxt);  
convertView.setTag(holder);  
}else  
{  
holder = (ViewHolder) convertView.getTag();  
}  
System.out.println("position------------------->" +position);  
System.out.println("mSmsPic.get(position)------------->" +mSmsPic.get(position));  
System.out.println("mContactsName.get(position)------------->" +mContactsName.get(position));  
System.out.println("mContactsmessage.get(position)------------->" +mContactsmessage.get(position));  
holder.image.setImageBitmap(mSmsPic.get(position));  
holder.nametxt.setText(mContactsName.get(position));  
holder.messagetxt.setText(mContactsmessage.get(position));  
return convertView;  
}  

30分钟彻底学会C语言指针视频教程

此课程是黄强老师针对C、C++指针的专题课程,通过对指针本质的讲解,帮助学员对指针快速的理解,并讲结合真实企业开发中指针的使用技巧,从而帮助学员高效,快速、灵活的掌握指针相关难点!
  • 2018年01月03日 00:48

ViewHolder模式获取控件空指针异常

在用ListView做开发的时候需要集成BaseAdapter类,复写其getView方法,这个想必大家都是知道的。今天在调试的时候遇到一个很折腾人的问题,在ViewHolder模式是用以下方式给Te...
  • linyeban
  • linyeban
  • 2016-09-10 23:30:31
  • 1005

关于在外部拿到RecyclerView的viewholder的几种方式

在实际开发中,我们常常碰到这样的需求,需要在外部拿到RecyclerView 中的viewHoler,从而动态的修改UI,在RecyclerView中,我们需要自己封装点击事件,一般的做法是在recy...
  • qq_21949639
  • qq_21949639
  • 2016-07-31 01:18:39
  • 7189

android ViewHolder 空指针异常

android ViewHolder 空指针异常 的时候,需要检测一下几个地方 1)首先确认  public View getView(int position, View convertView...
  • cw2004100021124
  • cw2004100021124
  • 2014-06-07 17:33:39
  • 1738

ViewHolder 中空指针 找不到控件

08-16 06:29:19.453: E/AndroidRuntime(998): FATAL EXCEPTION: main 08-16 06:29:19.453: E/AndroidRunti...
  • cyooke
  • cyooke
  • 2015-08-16 14:35:30
  • 1559

ListIVew中在getView中给View设置了setTag,出现空指针

以前不明白在ListVIew的getView()中给某个View设置了Tag,最后findViewWhtihTag()获取这个View的时候,有时候会出现空指针,为什么会出现空指针呢?很简单,因为co...
  • yymonkeydo
  • yymonkeydo
  • 2015-02-12 17:03:17
  • 448

ListView的Adapter有多个ViewHolder的时候导致的ViewHolder类型转换错误!

问题复现 背景是这样的,我用的CursorAdapter,然后重写了getViewTypeCount方法 @Override public int getViewTypeCount()...
  • u010335298
  • u010335298
  • 2016-09-08 10:58:34
  • 1724

在RecycleView.Adapter 的 onBinderViewHolder 中刷新adapter报错的问题

我在我自己的项目中使用到了RecycleView,然后在RecycleView.Adapter中的onBinderViewHolder中刷新了我的adapter。 然后报了如下错误: java.lan...
  • qq_26033289
  • qq_26033289
  • 2016-04-28 22:42:07
  • 2151

【Android】自定义ListView的Adapter报空指针异常解决方法

刚刚使用ViewHolder的方法拉取ListView的数据,但是总会报异常。仔细查看代码,都正确。 后来打开adapter类,发现getView的返回值为null。 即return null。 ...
  • song19891121
  • song19891121
  • 2014-10-28 02:17:53
  • 2450

android RecyclerView获得单个Item的ViewHolder

我们在使用RecyclerView时,有时候还需要获取某个Item的viewHolder,具体如下: LinearLayoutManager layoutManager= new Linea...
  • wangchaoyong5566
  • wangchaoyong5566
  • 2016-07-09 15:33:50
  • 1428
收藏助手
不良信息举报
您举报文章:ViewHolder模式获取控件空指针异常,小错误很坑爹
举报原因:
原因补充:

(最多只允许输入30个字)