Независимо от значения, которое вы хотите изменить в своем адаптере, вы можете сделать, используя notifyItemChanged(position)
. NotifyItemChange
работает только при изменении класса модели.
Допустим, здесь вы устанавливаете значение «Имя книги» на TextView
, используя этот код.
Books g = bookslist.get(position);
holder.bookName.setText(g.getBname());
Теперь, если вы хотите изменить значение имени книги на Button
клик, вы должны изменить значение в вашей ArrayList
модели, а затем уведомить об этом.
Books g = bookslist.get(position);
g.setBname("your new value");
После этого ваш notifyItemChanged(position)
отобразит новое значение. Вот как notify
работает в RecyclerView
Почему вы должны это сделать?
Всякий раз, когда уведомление вызывается в RecylerView
, оно снова устанавливает значение из ArrayList
. Но в вашем случае значение не обновляется локально в вашем списке, а обновляется в FireBase
. Вот почему вы получаете обновленное значение каждый раз, когда вы снова открываете свое приложение.
Примечание
Чтобы изменить значение Button
с текстом «Удалить», получите Markid
в поле данных FireBase
. Затем установите это значение в соответствующей модели (этой позиции) из ArrayList
для String
Markid
.
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.child("bmark").getRef().setValue("Solved");
// Here you need to save the value in the arraylist.
bookslist.get(position).setMardid("Here what ever the value you will pass will get updated on the button after notify"); //Try adding the static string that you want after button click.
notifyItemChanged(position)
}