RecyclerView 点击位置错乱问题

错误分析

RecyclerView 有一堆数据,然后点击添加,其中一个pos位置的数据变成蓝色,然后下滑位置会发生错乱,其中的原理,其实是和listview错误是类似的。

如图:。点击添加则字变成蓝色,点击取消则变成黑色。未处理之前其实上滑下滑会出现蓝字错乱问题。


问题解决

在RecyclerView 里的适配器中解决以下的问题。所有代码都在RecyclerView 的适配器中设置。
 1.先设一个List  将点击按钮的位置保持下来。
 
  
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中保存的位置。



猜你喜欢

转载自blog.csdn.net/R_ine/article/details/54599042