按钮Like在RecyclerView中闪烁

时间:2018-09-01 11:15:47

标签: android android-recyclerview kotlin

multer

我对recyclerview有问题。每次单击“爱”按钮时,我都希望将颜色和文本更改为红色,但是当我上下滑动时,按钮会闪烁到另一个位置。这是我的代码:

holder.layoutLove.setOnClickListener {
        selectedPosition = holder.adapterPosition
        notifyDataSetChanged()

        Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()

    }
    if (selectedPosition == holder.adapterPosition) {
            holder.tvLove.setTextColor(Color.RED)
            holder.imvLove.setImageResource(R.drawable.liked)

    }

2 个答案:

答案 0 :(得分:0)

您只是在else中逃脱了clickListeners的条件

holder.layoutLove.setOnClickListener {  

    if (position == holder.adapterPosition) {
         holder.tvLove.setTextColor(Color.RED)
         holder.imvLove.setImageResource(R.drawable.liked)
    }else{  
         holder.tvLove.setTextColor(Color.GREY)
         holder.imvLove.setImageResource(R.drawable.unlike)
    }
    notifyDataSetChanged()

    Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
}  

希望这段代码对您有所帮助。

如果仍然不能解决问题,请使用“模型类”进行处理。

答案 1 :(得分:0)

只需测试此代码,我看不到任何闪烁:

私有类CustomAdapter扩展了RecyclerView.Adapter {

    private List<Boolean> data = new ArrayList<>();

    public void updateData(List<Boolean> data) {
        this.data.clear();
        this.data.addAll(data);
        notifyDataSetChanged();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_view, parent, false);
        return new ViewHolder(view);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        holder.view.setBackgroundColor(data.get(position) ? getColor(R.color.colorAccent) : getColor(R.color.black));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                data.set(position, !data.get(position));
                CustomAdapter.this.notifyItemChanged(position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private final ImageView view;

        public ViewHolder(View itemView) {
            super(itemView);
            view = itemView.findViewById(R.id.image);
        }
    }
}

问题应该在模型中或在视图侧。我建议将使用模型作为视图状态的单一来源。