ListView展示不同布局需要注意的地方

本文探讨了在Android开发中使用ListView时遇到的一个常见问题:如何正确处理item视图的复用,特别是当列表项包含不同布局时。通过一个具体的示例说明了错误处理可能导致的问题,并提供了一个简单有效的解决方案。

尊重劳动成果,转载请标明出处: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();
        }

//下面这里执行相应的操作,举一个例子
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

转载于:https://www.cnblogs.com/tangZH/p/8419010.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值