ListView展示不同布局需要注意的地方
尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8419010.html
我们在项目中经常需在一个listview中展示不一样的布局,我们可以在adapter的getView()中根据position来决定该展示哪些布局。
我在项目中便是如此,第一个item是展示一张图片(判断当position==0的时候返回该图片),而当position不为0的时候返回我们需要的布局,如下:
ViewHolder viewHolder = new ViewHolder(); if (view == null) { view = mInflater.inflate(R.layout.listview_item, viewGroup, false); viewHolder.textCate = view.findViewById(R.id.discover_text_category); viewHolder.textView = view.findViewById(R.id.discover_view_all); viewHolder.arrow = view.findViewById(R.id.discover_arrow); viewHolder.divider = view.findViewById(R.id.discover_item_divider); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); }<br /><br />//下面这里执行相应的操作,举一个例子<br />
viewHolder.textCate.setText("A")
可是这时候问题来了,滑动到下面的时候报错:找不到组件textCate
苦思良久,最终我是这样分析的:
listView的item会复用,也就是滑动到下面的时候,下面的item会复用第一个item,也就是图片,然后代码在判断view == null的时候不成立,于是执行
viewHolder = (ViewHolder) view.getTag();
而我们没有给图片设置tag,取出来的当然为空,因此下面会报空指针。
有什么觉方法呢?
其实很简单,只要在判断view == null后面再加上一个判断就行了:
if (view == null || view.getTag() == null)
当view为null或者view取出来的tag也为null的时候,那就需要去重新加载布局,设置tag
相关推荐
85457218 2016-03-06
89457902 2015-09-08
chenjinlong 2020-02-03
yinbaoshiguang 2019-06-27
Palingenesis 2019-06-21
OliverLau 2019-06-20
liuhedev 2018-04-16
yffhhffv 2015-10-13
84417619 2014-05-09
RungBy 2014-01-02
Leo的memo 2012-12-12
82500190 2012-07-28
89457902 2012-07-17
guizhongyun 2012-04-12
85457218 2011-09-05
wangkuifeng0 2011-04-18
明学的白板 2018-01-25
优主张 2018-01-16
稀土 2018-01-16