RecyclerView+Checkbox亂序問題

前幾天做項目時用到了Android5.0的新特性RecyclerVIew+Checkbox,亂序問題耽誤了好久,終於解決了,在此分享一下我做的項目中不僅要避免Checkbox亂序問題,還要將所選中的id的電話號碼傳遞給Activity,說一下大概思路吧、
我在adapter中做了如下工作:
第一步:用一個Map集合來記錄所選中的Checkbox,該Map集合的key值爲position,value值就設置爲該id的電話號碼,方便給activity傳值,該集合只記錄被選中的checkbox的positon和電話號碼。
第二步:在adapter的onBindViewHolder中通過判斷該map集合中是否包含該id,若包含則checkbox置爲true
if (mCheckBoxState.containsKey(position)) {
contentHolder.mInvitedCheckBox.setChecked(true);
} else {
contentHolder.mInvitedCheckBox.setChecked(false);
}
第三步:就是對checkbox的點擊事件處理,在這裏不能去利用oncheckdChangeLishener來處理了,在每次onBindViewHolder對checkbox賦值時都會去調用該方法,造成checkbox狀態不對,解決辦法很簡單,給checkbox添加click事件。
第四步:就是onclick裏的代碼了
if (v.getId() == R.id.invited_checkbox) {
mFlags = (Integer) v.getTag(R.id.tag_id);
if (mCheckBoxState.containsKey(mFlags)) {
mCheckBoxState.remove(mFlags);
} else {
mCheckBoxState.put(mFlags, Boolean.TRUE);
}
第五步:我用一個list型的變量來統計所選中的id的position,並創建它的get方法,在activity需要獲取所選中id的電話號碼時調用get的方法
public String getCheckUserMobile() {
for (int i = 0; i < mList.size(); i++) {
if (mCheckBoxState.containsKey(i)) {
mCheckUserMobile = (mCheckUserMobile == null ? StringUtils.getString(mList.get(i).getMobile()) :
StringUtils.getString(mCheckUserMobile, ",", mList.get(i).getMobile()));
}
}
return mCheckUserMobile;
}

若有建議請留言,分享給大家,共同進步

注:此爲轉載文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章