解决ListView内置选择框复用混乱的问题

本文介绍如何解决ListView在使用内置选择框时因ViewHolder复用导致的显示混乱问题。通过自定义Adapter并在数据源中增加'isClicked'字段记录选中状态,实现在用户点击时正确更新显示。
摘要由CSDN通过智能技术生成

一、概述

有时候我们需要实现这样一个ListView,比如购物车中,选中某些物品,买单结账。很多时候使用的就是ListView用于展示物品详情,用户点中某个Item,选择框置位。但是因为ViewHolder的复用,下拉的时候会出现复用的Item在没有选中的情况下,选择框是钩取的,这时候要自定义一个适配器Adapter来解决这个问题。

二、实现

在自定义Adapter时,我们会传入数据源,用于实时更新item的显示,一般数据源是List< Map < String, Object > >类型的数据mData,通过item的位置position可以查找到该item对应的map,通过该map就可以获取相应组件需要显示的值。
操作如:mData.get(position).get("id") //获取第position个item的id

那么解决的思路就是在对应的map中加上相应字段“isClicked”,默认为false,当用户点击了该item,则修改为选中状态true,通过调用listClickAdapter.notifyDataSetChanged(); 来进行更新。

ps:之前想的是直接点中修改ChechBox的状态,不修改mData的数据 ,这样会出现的问题是,触屏滑下去后,再滑上来的时候会出现混乱。原因是再次滑上来的时候,Item是进行重画的,依照的正是mData的数据,假如没有记录CheckBox状态的字段,CheckBox的状态保持复用之前的状态,而不是对应Item的状态。

实现代码(当然可以用ViewHolder进行修改):

public class ListClickAdapter extends BaseAdapter{

    private LayoutInflater mInflater;
    private List<Ma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值