错误分析
RecyclerView 有一堆数据,然后点击添加,其中一个pos位置的数据变成蓝色,然后下滑位置会发生错乱,其中的原理,其实是和listview错误是类似的。
如图:。点击添加则字变成蓝色,点击取消则变成黑色。未处理之前其实上滑下滑会出现蓝字错乱问题。
问题解决
在RecyclerView 里的适配器中解决以下的问题。所有代码都在RecyclerView 的适配器中设置。
1.先设一个List 将点击按钮的位置保持下来。
3.在添加和取消按钮中,将分别将位置add或remove,listPos中的数据
private List<Integer> listPos= new ArrayList<>();
2.然后onBindViewHolder里将所有的数据都设置为黑色,并将listPos中保存的位置数据变成蓝色 holder.textView.setTextColor(context.getColor(R.color.black));
ref(holder,position);
listPos的添加和取数据的方法分别为:listAdd 和ref:
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);
}
}
}
}
3.在添加和取消按钮中,将分别将位置add或remove,listPos中的数据
add:
listAdd(position);
ref(holder, position);
remove:
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中保存的位置。