1. 程式人生 > >RecyclerView+checkbox滑動導致複用混亂問題的解決方案

RecyclerView+checkbox滑動導致複用混亂問題的解決方案

最近做一個專案,裡面遇到了一個小問題吧我覺得這些問題也是我們時常會用到的。我們需要在使用者新註冊的時候為他推薦一些人來選擇關注。用到了RecyclerView 那麼在RecyclerView的Adapter裡面用到的是checkbox讓使用者有選擇的進行關注,當列表足夠多的時候這時下拉就會產生checkbox複用的混亂問題,我們發現,我們選擇或者取消選擇再下拉時連位置都改變了。讓人非常煩惱。下面就來看看我的解決方案吧:

1:在RecyclerView的Adapter裡面new一個map集合,用來存放checkbox的選擇狀態  下面貼下程式碼:

// 儲存勾選框狀態的map集合  解決滑動的複用問題
private Map<Integer, Boolean> map = new HashMap<>();
2:在adapter被初始化的時候,給checkbox一個預設的選中狀態,我這裡預設選中的是true:
public SuggestAdapter(SuggestActivity suggestActivity, List<SuggestBean.ListBean> anchorDatas) {
    this.mDatas=anchorDatas;
    this.suggestActivity = suggestActivity;
    initMap
(); } private void initMap() { for (int i = 0; i < mDatas.size(); i++) { map.put(i, true); } }
3:在繫結viewholder裡面設定預設的選中狀態並且設定checkbox的選中監聽事件,在選中監聽事件里根據ischeck的狀態來修改map集合:
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
   try {
        holder.tvAnchorNickname
.setText(mDatas.get(position).getNickname()); XImageLoader.load(suggestActivity,mDatas.get(position).getIcon(),holder.ivSuggestedAnchorIcon); holder.cbAnchorChecked.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { map.put(position, isChecked); } }); if (map.get(position) == null) { map.put(position, false); } holder.cbAnchorChecked.setChecked(map.get(position)); }catch (Exception e){ e.printStackTrace(); } }
好啦。那麼這個問題就完美的解決了哦。

假如我們在activity需要根據checkbox的狀態來做一些操作,我們可以在adapter裡面寫一個方法返回map,這樣我們就可以在activity得到map資料啦。

adapter中getData方法:

public  Map<Integer, Boolean> getData() {
    return map;
}
Activity中通過Adapter的.getData()方法得到map
Map<Integer, Boolean> map = suggestAdapter.getData();
Iterator iterator=map.entrySet().iterator();
while (iterator.hasNext()){
    Map.Entry entry = (Map.Entry) iterator.next();
    int key = (int) entry.getKey();
    Boolean value = (Boolean) entry.getValue();


    if(value==true){
        suggestPresenter.setConcern(this,AnchorDatas.get(key).getUid(),"1");
    }
}

最後請大家多多支援:歡迎關注公眾號:石頭鋪   微訊號:Android_Programmer   每天都會更新安卓技術文章和一些解決方法。謝謝大家