Кнопка «Нравится» мигает в RecyclerView - PullRequest
0 голосов
/ 01 сентября 2018

image

У меня проблема с переработчиком. Каждый раз, когда я нажимаю кнопку «Любовь», я хочу изменить цвет и текст на красный, но когда я провожу пальцем вверх и вниз, моя кнопка мигает в другую позицию. Вот мой код:

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 голосов
/ 01 сентября 2018

Только что проверил этот код, я не вижу никаких миганий:

закрытый класс 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);
        }
    }
}

Проблема должна быть либо в модели, либо на стороне обзора. Я предлагаю использовать модель в качестве единственного источника для состояния просмотра.

0 голосов
/ 01 сентября 2018

Вы просто избегаете 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()
}  

Пусть вам поможет этот код.

Если это по-прежнему не помогает, используйте для этого класс модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...