错误分析
RecyclerView 有一堆数据,然后点击添加,其中一个pos位置的数据变成蓝色,然后下滑位置会发生错乱,其中的原理,其实是和listview错误是类似的。
如图:。点击添加则字变成蓝色,点击取消则变成黑色。未处理之前其实上滑下滑会出现蓝字错乱问题。
问题解决
在RecyclerView 里的适配器中解决以下的问题。所有代码都在RecyclerView 的适配器中设置。
1.先设一个List 将点击按钮的位置保持下来。
2.然后onBindViewHolder里将所有的数据都设置为黑色,并将listPos中保存的位置数据变成蓝色private List<Integer> listPos= new ArrayList<>();
holder.textView.setTextColor(context.getColor(R.color.black)); ref(holder,position);
listPos的添加和取数据的方法分别为:listAdd 和ref:3.在添加和取消按钮中,将分别将位置add或remove,listPos中的数据private void listAdd(int pos){ int isPos = 0; for(int i = 0;i< listPos.size(); i++){ if(listPos.get(i) == pos){ isPos = 1; } } if(isPos == 0){ listPos.add(pos); } } private void ref(ViewHolder holder, int position){ for(int i = 0;i< listPos.size(); i++){ if(listPos.size() != 0) { if (listPos.get(i) == position) { holder.textView.setTextColor(context.getColor(R.color.blue)); holder.add.setVisibility(View.GONE); holder.candle.setVisibility(View.VISIBLE); } } } }
add:
remove:listAdd(position); ref(holder, position);
for(int j = 0;j< listPos.size(); j++){ if(listPos.get(j) == position){ LogInfo.log(listPos + ""); listPos.remove(j); } } holder.textView.setTextColor(context.getColor(R.color.black));
总结
Ok了。大致步骤就是这样,总的来说就是先将所有数据变成黑色,然后再循环保存的数据位置,将其变成蓝色。并且点击添加和取消,添加或删除listPos中保存的位置。