ListView 中Checkbox 错乱问题

最近项目需求,模仿今日头条的短视频播放,点击其中一个视频,将其他的视频停止播放。撸完代码后执行,发现会发现图片错位的情况,然后去谷歌,寻求解决,大多数都是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();
        }
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,210评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,937评论 0 17
  • 听过了很多的故事 面对爱情的感觉 越来越无感, 小A是一个特别热心体贴的一个人 遇到他的时候 我想象过无数个和他结...
    小叮當阅读 1,454评论 0 0
  • 最近每天都是半夜12点以后收到一些人的微信,并没有多么紧急的消息,大多都是询问作业或者孩子上课的表现情况之类的...
    桔子王小喵阅读 4,042评论 2 3
  • 课程任务 题目1: dom对象的innerText和innerHTML有什么区别? 区别:innerText 是一...
    饥人谷_sunny阅读 1,202评论 0 0

友情链接更多精彩内容