#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, пожалуйста, скажите мне, что я сделал не так? мой ответ неверен или код не работает? пожалуйста, учтите комментарий при голосовании за понижение