Измените цвет фона следующего элемента в адаптере при нажатии на текущий элемент

#android #android-recyclerview

#Android #android-recyclerview

Вопрос:

Как изменить цвет следующего элемента RecyclerView при нажатии на кнопку текущего элемента в адаптере.
Мой код похож :

 holder.pick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.pick.startAnimation(animFadeIn);
            editStatus(studentrouteList.get(position).getId(),"2");
            holder.waittime.setText("done!");

         holder.itemstudent.setBackgroundColor(Color.parseColor("#bee180"));
            int currentpos =holder.getAdapterPosition();
            int oldpos = holder.getOldPosition();
            Log.e("", String.valueOf("new pos : "  currentpos   "old pos : "  oldpos));
            Constant.pos = currentpos   1;
            int newpos = position 1;
            if(studentrouteList.get(position   1).getStatus().equals("0")) {
           holder.itemstudent.setBackgroundResource(R.drawable.next_pickup); // here change current item view ... Need next item to change
            }
        }
    }); 
  

Ответ №1:

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

 // position of next updated item which we need to update background
updatedPositionToChangeBgColor = -1
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    Log.d("onBindViewHolder called ","Adapter");
    if(updatedPositionToChangeBgColor == position) {
        holder.itembackground.setColor("#000000");
    } else {
        // do nothing   
    }
    holder.item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              //update position of next item and call notifyItemChanged to tell adapter it need to recreate next item again  
              updatedPositionToChangeBgColor = position   1;
              notifyItemChanged(updatedPositionToChangeBgColor);
         }
    });

}    

Второй способ опять тот же, но из класса активности или модели, который вы вызываете, или вы можете использовать интерфейс для обновления позиции и вызова notifyItemChanged(updatedPositionToChangeBgColor); , чтобы сообщить адаптеру о повторном создании этого элемента. И все готово
Готово.
Спасибо

Комментарии:

1. если вы получили ответ, пожалуйста, проголосуйте, чтобы будущие пользователи, ищущие помощи, также могли воспользоваться преимуществами, подобными u: D

2. downvoter, пожалуйста, скажите мне, что я сделал не так? мой ответ неверен или код не работает? пожалуйста, учтите комментарий при голосовании за понижение