RecyclerView 复用与 CheckBox 结合使用导致的问题
来源:互联网 发布:网络最常鼓掌处理方法 编辑:程序博客网 时间:2024/05/29 15:10
BangNote 中使用了 RecyclerView 来盛放 Note List, 由于 Note List 需要编辑功能,所以里面一定要使用 CheckBox,这就导致了一个经常出现的问题:RecyclerView 复用会导致 CheckBox 的状态混乱,表现为:当条目比较多的时候,选中了上面的 CheckBox 之后,下面的 CheckBox 也会被选中,而滚动到上面之后,上面的选择状态又会消失。
这可能是一个很经典的问题了,于是我上网搜索了一下,找到很多解决方案,其中比较简单的一种是新建一个 boolean 类型的数组(或 ArrayList ),用来存放 CheckBox 的状态,当 onCheckedChangeListener 被回调的同时也改变数组对应元素的状态,然后在外部也通过数组的状态来设置一下 CheckBox 的选中状态。这看起来是一个很好的解决办法,并且似乎 90% 的人都使用此方法解决了问题。
然而我试了很多遍,大大小小的微调也有十几次,根本没有解决问题,后来经过测试我发现,当 RecyclerView 将元素滚动到屏幕外面的时候,onCheckedChangeListener 也被回调了,我不知道这是怎么回事,但是这直接导致了,任何通过 onCheckedChangeListener 来监听 CheckBox 状态的方法都是无效的。
想了想,我决定“曲线救国”,即利用 CheckBox 的点击事件来设置 CheckBox 的状态,而避免使用 onCheckedChangeListener,代码示例如下:
//RecyclerView 的 Adapter
public class MyAdapter extends RecyclerView.Adapter<NoteItemAdapter.ViewHolder> {
//其他
static class ViewHolder extends RecyclerView.ViewHolder {
//ViewHolder
}
//其他
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
//设置其他绑定事件
holder.checkBox.setChecked(stateContainer.getChecked());
//stateContainer 中存放 CheckBox 的状态
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.checkBox.setChecked(!stateContainer.getChecked());
stateContainer.setChecked(holder.checkBox.getChecked());
}
});
//设置其他绑定事件
}
}
0 0
- RecyclerView 复用与 CheckBox 结合使用导致的问题
- RecyclerView与CheckBox结合使用错乱问题
- RecyclerView+checkbox滑动导致复用混乱问题的解决方案
- 解决RecyclerView复用导致EdittText、CheckBox等显示异常的问题
- Recyclerview中checkbox的复用问题
- GridView 与CheckBox 结合使用全选的问题
- RecyclerView中使用checkbox遇到的问题
- Android中Recyclerview使用9----Recyclerview的条目复用,出现CheckBox或者设置背景混乱问题
- RecyclerView复用的一些问题(Checkbox错乱)
- RecyclerView中CheckBox复用问题
- RecyclerView解决CheckBox复用问题
- RecyclerView的Item复用出现问题导致排版混乱
- RecyclerView与LisView结合使用
- CheckBox与ListView结合使用
- 解决列表 (ListView GrifView RecyclerView )结合CheckBox实现列表选择的的问题
- 关于ListView里面,嵌入Checkbox适配器复用导致的Checkbox混乱问题
- RecyclerView使用GridLayoutManager导致间隙变大的问题
- RecyclerView中CheckBox复用以及选中消失的问题
- Java 8 时间日期库的20个使用示例
- C++数据成员必须在构造函数初始化列表中初始化
- Linux下文件系统的三个主要时间属性atime、ctime、mtime
- RocketMQ(二)集群配置
- TensorFlow入门 fully_connected_feed.py
- RecyclerView 复用与 CheckBox 结合使用导致的问题
- 170321 Qt远程控制界面、文件图像,汇编第四章实验
- Android-Mina-Java.lang.NoclassDefFoundError:org.apache.mina.transport.socket.NioSocketConnector
- Table Decorations CodeForces
- 关于IE11访问百度贴吧不能翻页的解决办法
- Golang操作Office Excel 文档类库Excelize
- Google推荐的图片加载库Glide介绍
- RocketMQ(三)原理与实践
- 1