ListView 中Checkbox 错乱问题

简介: 最近项目需求,模仿今日头条的短视频播放,点击其中一个视频,将其他的视频停止播放。撸完代码后执行,发现会发现图片错位的情况,然后去谷歌,寻求解决,大多数都是setTag()方式,可以试过后还是存在问题。

最近项目需求,模仿今日头条的短视频播放,点击其中一个视频,将其他的视频停止播放。撸完代码后执行,发现会发现图片错位的情况,然后去谷歌,寻求解决,大多数都是setTag()方式,可以试过后还是存在问题。思考后发现这里的问题其实就是ListView中Checkbox错乱问题。

原理:复用view,当选中Checkbox的时候,记下其状态,用map保存起来。
定义集合保存。
控件:假设控件为my_view,点击my_view后改变背景操作,代码如下:

class MyActivity extends Activity {
    ...
    // 1.定义集合保存状态
    private Map<Integer, Boolean> isChecked;

    // 2.初始化状态,默认没有选中状态为false
    private void initData(){  
        isChecked=new HashMap<>();  
        for(int i=0;i<list.size();i++){
            isChecked.put(i, false);  
        }  
    } 
    
    private class MyAdapter extends BaseAdapter {
        public MyAdapter() {
            // 2.调用初始化方法
            initData();
        }
        ...
        @Override
        public View getView(final int position, View convertView, ViewGroup parent){
            ...
            // 3.点击事件后记录
            viewHolder.my_view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 4.变量记录
                    isChecked.put(position, true);
                }
            });
            // 5.初始化my_view的状态一定要放在监听器后面,否则还是会出现数据错乱情况。(重要)
            holder.my_view.setBackground();
        }
        
    }
}
目录
相关文章
|
前端开发 JavaScript
使用 MobX 优化 React 代码
使用 MobX 优化 React 代码
168 0
|
12月前
|
JavaScript
Vue2.x和Vue3.x v-for中还可以这样解构赋值
本文介绍了在Vue 2.x和Vue 3.x中使用`v-for`指令时,如何通过对对象进行解构赋值来简化模板中的代码,并通过实例展示了在`data`中的熟悉如何通过解构来请求接口的值。
138 0
Vue2.x和Vue3.x v-for中还可以这样解构赋值
|
11月前
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
1333 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
11月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
1329 0
|
Android开发
Android自定义之高仿淘宝下拉刷新
Android自定义之高仿淘宝下拉刷新
174 0
|
Java API Android开发
安卓开发app 调用usb 摄像头 需要用到哪个库
在安卓开发中,调用USB摄像头常常使用libuvc库,这是一个跨平台处理USB视频设备的库。有多个基于libuvc的开源项目简化了在安卓上的使用,如UVCCamera和Android EasyCap UVC。例如,UVCCamera提供了一个更简单的接口来访问USB摄像头,并且可以在Jetpack Compose中显示预览。开发者可以参考官方文档、开源项目以及相关教程和资源来学习和实现这一功能。
1719 0
|
算法 程序员 测试技术
|
测试技术 UED
软件测试中的探索式测试方法
在软件开发的生命周期中,测试环节扮演着至关重要的角色。传统的测试方法往往依赖于预设的脚本和场景,而探索式测试则提供了一种更为灵活和动态的测试方式。通过结合测试人员的经验和直觉,探索式测试能够更有效地发现软件中的潜在问题。本文将深入探讨探索式测试的核心概念、实施步骤及其在现代软件开发中的应用价值。
|
缓存 Java 开发工具
简记一个错误
简记一个错误
1081 0
|
JavaScript 前端开发 编译器
【typescript入门手册】为什么说js是动态类型语言呢?
【typescript入门手册】为什么说js是动态类型语言呢?
376 0