Android开发,RecyclerView复用后数据错乱该怎么解决?

图片描述
这是一个从左往右滑动的RecyclerView,当我点击第一个item的关注后,会变为"已关注",但是当我滑动到右边的时候有些item数据也变了"已关注",滑动回来数据还是错乱了

我是这样处理的,但是不行:

 public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        //TODO:有bug,复用后状态错乱.需要点击对应item的关注改变状态
        TextView tvNotFocus = view.findViewById(R.id.tv_related_theme_recommended_focus);//默认未关注
        String focus = tvNotFocus.getText().toString();
        List<TopicRelatedRecommendedBean> data = getData();
        TopicRelatedRecommendedBean topicRelatedRecommendedBean = data.get(position);
        boolean select = topicRelatedRecommendedBean.isSelect();
        Log.d(TAG, "1145=   "+select);
        if (view.getId() == R.id.tv_related_theme_recommended_focus) {
            if (focus.equals("关注")) {
                tvNotFocus.setText("已关注");
                tvNotFocus.setBackgroundResource(R.drawable.topic_already_focus_shape);
            } else if (focus.equals("已关注")) {
                tvNotFocus.setText("关注");
                tvNotFocus.setBackgroundResource(R.drawable.release_button_shape);
            }
        }
//        if (select) {
//            Toast.makeText(mContext, "取消关注", Toast.LENGTH_SHORT).show();
//            topicRelatedRecommendedBean.setSelect(false);
//            tvNotFocus.setText("关注");
//            tvNotFocus.setBackgroundResource(R.drawable.release_button_shape);
//        } else {
//            Toast.makeText(mContext, "关注", Toast.LENGTH_SHORT).show();
//            topicRelatedRecommendedBean.setSelect(true);
//            tvNotFocus.setText("已关注");
//            tvNotFocus.setBackgroundResource(R.drawable.topic_already_focus_shape);
//        }
    }
阅读 11.1k
1 个回答

先给你的bean加上是否关注的字段,点击的时候改变字段的值,在数据填充的时候判断是否关注,再去设置不同的状态。下面是虚代码

    //点击的时候改变字段的值
    public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        //TODO:有bug,复用后状态错乱.需要点击对应item的关注改变状态
        TextView tvNotFocus = view.findViewById(R.id.tv_related_theme_recommended_focus);//默认未关注
        String focus = tvNotFocus.getText().toString();
        List<TopicRelatedRecommendedBean> data = getData();
        TopicRelatedRecommendedBean topicRelatedRecommendedBean = data.get(position);
        boolean select = topicRelatedRecommendedBean.isSelect();
        Log.d(TAG, "1145=   "+select);
        if (view.getId() == R.id.tv_related_theme_recommended_focus) {
            topicRelatedRecommendedBean.isAttention = !topicRelatedRecommendedBean.isAttention;
            notifyDataSetChanged();
        }
    }
    
    //填充数据的时候判断
    @Override
    public void onBindViewHolder(RecyclerHolder holder, int position) {
        List<TopicRelatedRecommendedBean> data = getData();
        TopicRelatedRecommendedBean topicRelatedRecommendedBean = data.get(position);
     
        holder.tvNotFocus.setText(topicRelatedRecommendedBean.isAttention ? "关注" : "已关注");
        holder.tvNotFocus.setBackgroundResource(topicRelatedRecommendedBean.isAttention ? R.drawable.topic_already_focus_shape : R.drawable.release_button_shape);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题