安卓开发ListView列表点击显示错乱bug自我总结

出现列表点击显示错乱的现象,一定是适配器的问题,并且一定是getView方法里面的问题,在getView中,如果有if语句,一定一定一定要有对应的else语句,否则很容易出现错乱,因为这从逻辑上就不对!除此之外,请检查一下你是否有一个Map集合来存储复选框的check状态;如果没有,请加一个!

最近维护的录音模块需要给列表的每一个item的复选框添加动效,由原来的点击item图片切换变为动画切换,什么时候需要A动画不需要B动画,什么时候需要B动画不需要A动画,什么时候都需要,什么时候都不需要,这样一下子就增加了很多种情况,于是新引入了两个布尔值来进行控制刷新、显示和启动关闭动画,由于缺乏经验,走了很多坑,现在回过头来,自己总结一下吧!

首先,这些控制着刷新、显示和启动关闭动画的布尔值一定要见名知意,否则一段时间之后你自己都会搞不清楚这些变量是什么意思,和何况后来接手你项目的维护人员,就比如我接手录音模块时,适配器中有两个布尔变量分别叫做isEdit和canEdit,搞了半天都搞不清楚他们之间的区别,虽然没搞懂,但是不影响功能的添加和动画的实现,于是就稀里糊涂的用下去了,直到后来情况变的与越来越复杂,加一个布尔变量复杂度就会变成原来的两倍,一旦出现bug,改起来真的是头痛,直到昨天,我痛下决心大改了一次,去掉原有的看不懂的变量,详细的罗列出所有的显示情况,废话很多,先上例子!


例子:

需求:

1.列表界面,分为两个状态,编辑状态和非编辑状态,编辑状态下复选框显示为可见,非编辑状态下复选框显示为不可见;

2.编辑状态下,点击item,所在的position的item中的复选框显示点击动画,其他item的复选框不显示点击动画;

3.编辑状态与非编辑状态切换时,所有item的复选框执行滑入或者滑出的动画;

4.非编辑状态下,点击item,在复选框的位置出现音乐波形图,复选框不显示;

5.编辑状态下无法左滑删除,非编辑状态下可左滑删除;

基于上述需求,设置如下变量:

private boolean isInEditState = false;//是否处于编辑状态
private boolean closeAllLeftMenu = false;//是否关闭所有的左滑删除menu
private boolean ispause = true;//是否处于暂停状态
private boolean isNeedSlideAnimFromRightToLeft = false;//是否需要复选框滑入动画
private boolean isNeedSlideAnimFromLeftToRight = false;//是否需要复选框滑出动画

设置一个Map集合来存储复选框的check状态;

private Map<Integer, Boolean> isSelectedList = new HashMap<>();
并且在Adapter初始化的时候对集合赋值

public ListAdapter(Context context, List datas, int layoutId) {
    super(context, datas, layoutId);
    this.layoutId = layoutId;
    this.context = context;
    this.list = datas;
    initData();
}

private void initData() {
    if (list != null && list.size() > 0) {
        for (int i = 0; i < list.size(); i++) {
            isSelectedList.put(i, false);
        }
    }
}

键值对分别是:Key:Position,值:Value:CheckState

在每一次点击时改变所点击的position的value值,其他的不变,在Adapter中getView方法中,将除了当前点击的item之外的所有item的复选框check状态刷新为与集合中的check状态一致,且刷新时不执行动画;

最近加班比较多,想写又不想写博客,算了,先写这么多,以后再完善吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

却染人间愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值