ListView,RecyclerView遇CheckBox复用混乱解决方案
来源:互联网 发布:数据库考证 编辑:程序博客网 时间:2024/05/06 00:16
ListView,RecyclerView的复用机制,是为了减轻程序运行的压力,但又会由于复用而带来些许错乱问题,这里小编给大家提出一个解决方案,那么先说下解决思路:
1.复用:复用的是Views和datas(数据状态),也就是Holder和XXDataBean;
2.通过在"同个类"中记录的每个view的数据状态,强制改变view的显示状态;
3.当状态被改变时,同步更新"同个类"中临时保存的状态;
那么不再废话,直接上代码,这里以RecyclerView为例:
Adapter类中代码:
public class ReAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements CompoundButton.OnCheckedChangeListener{ private Activity activity; private int TITLE_TYPE = 0; //标题类型 private int CONTENT_TYPE = 1; //内容类型 private String[] titles; private List<Integer> contentListT; private ArrayList<Boolean> contentListCBox; public ReAdapter(Activity activity, RecycleBean bean) { this.contentListT = bean.contentListT; this.titles = bean.titles; this.contentListCBox = bean.contentListCBox; this.activity = activity; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TITLE_TYPE) { View view = activity.getLayoutInflater().inflate(R.layout.adapter_title, new RelativeLayout(activity)); RecycleTitleHolder recycleTitleHolder = new RecycleTitleHolder(view); return recycleTitleHolder; } View view = activity.getLayoutInflater().inflate(R.layout.adapter_content, new RelativeLayout(activity)); RecycleContentHolder recycleContentHolder = new RecycleContentHolder(view); recycleContentHolder.contentCBox.setOnCheckedChangeListener(this); //监听不可重复设置 return recycleContentHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //数据绑定 int itemViewType = getItemViewType(position); if (itemViewType==TITLE_TYPE) { ((RecycleTitleHolder) holder).titleT.setText(titles[position]); }else if (itemViewType==CONTENT_TYPE) { ((RecycleContentHolder) holder).bindData(contentListT,contentListCBox,position); } } @Override public int getItemCount() { return contentListT.size(); } @Override public int getItemViewType(int position) { if (position%9==0) { return TITLE_TYPE; } return CONTENT_TYPE; } @Override public void onCheckedChanged(CompoundButton checkbox, boolean b) { //数据修改 int position = (int) checkbox.getTag(); contentListCBox.set(position, b); //绑定和修改的contentListCBox集合,一定要放在同一个类中,如Adapter或Holder等均可(重点部分) }}
Holder类中代码:
public class RecycleContentHolder extends RecyclerView.ViewHolder { public TextView contentT; public CheckBox contentCBox; public RecycleContentHolder(View contentView) { super(contentView); contentT = (TextView) contentView.findViewById(R.id.content_tv); contentCBox = (CheckBox) contentView.findViewById(R.id.checkbox_content); } public void bindData(List<Integer> contentListT, ArrayList<Boolean> contentListCBox, int position) { contentT.setText(String.valueOf(contentListT.get(position))); contentCBox.setTag(position);//要先设置position给contentCBox,然后再setChecked();此处顺序不能颠倒(重点) contentCBox.setChecked(contentListCBox.get(position)); }}
Activity中部分代码:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(OrientationHelper.VERTICAL); //布局方向// recyclerview.addItemDecoration( new item); //分割线// recyclerview.setItemAnimator(); //添加动画 ReAdapter reAdapter = new ReAdapter(this,bean); recyclerview.setLayoutManager(linearLayoutManager); recyclerview.setHasFixedSize(true); //保存item尺寸值,以便不在测量 recyclerview.setAdapter(reAdapter);
其他此类文章: http://www.wfuyu.com/technology/23153.html
Android RecyclerView 使用完全解析: 猛戳_网址大大
SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和下拉刷新: 猛戳_网址呱呱
0 0
- ListView,RecyclerView遇CheckBox复用混乱解决方案
- RecyclerView+checkbox滑动导致复用混乱问题的解决方案
- RecyclerView 复用出现 CheckBox 或者 设置背景混乱问题
- RecyclerView中使用CheckBox出现勾选混乱的解决方案
- RecyclerView中使用CheckBox出现勾选混乱的解决方案
- RecyclerView中使用CheckBox出现勾选混乱的解决方案
- Android ListView 常见问题汇总 checkbox 点击 复用混乱
- RecyclerView条目复用导致混乱的解决方案之一
- ListView可回收引起CheckBox选中状态混乱的解决方案
- android ListView 中CheckBox选中后,状态混乱的解决方案
- 关于ListView里面,嵌入Checkbox适配器复用导致的Checkbox混乱问题
- Android中Recyclerview使用9----Recyclerview的条目复用,出现CheckBox或者设置背景混乱问题
- android ListView/Recyclerview滚动时自动调用onCheckedChanged导致CheckBox状态混乱的解决办法
- android ListView/Recyclerview滚动时自动调用onCheckedChanged导致CheckBox状态混乱的解决办法
- Android完美解决ListView复用导致的Checkbox状态混乱问题
- RecyclerView中CheckBox显示混乱的解决办法
- Recyclerview嵌套edittext,checkbox混乱问题
- Android中ListView、GridView里的CheckBox混乱且记录选中数量不准确的解决方案
- IOS实现图片倒影效果
- CMT跟踪算法分析(四)
- Objective-c - 函数与block的异同
- 栈-后进先出-java
- sqoop qoop-export 数据覆盖
- ListView,RecyclerView遇CheckBox复用混乱解决方案
- 京东白条闪付怎么开通,白条闪付怎么套现?
- https使用相关资料
- JZOJ4944. 【WC模拟】Monument
- 响应式开发(五)-----Bootstrap CSS----------Bootstrap 网格系统
- sqoop export 数据覆盖更新
- 20170114总结
- <python>class
- 启动页延迟