Кажется, ваш код немного отделен. Примерно так будет заключаться в поведении. Все, что вам нужно, это изменить значок и сохранить состояние сообщений.
Важно следить за тем, что вы сохранили.
Ваш класс адаптера. В нем отсутствует много кода, но что-то вроде этого.
List<Post> posts; // init this in constructor
public void update(List<Post> posts) {
// do some nullchecking, maybe clone the posts. It's sent as a reference now.
this.posts = posts;
notifyDataSetChanged();
}
@Override
public void onBindViewHolder(final MyViewHolder viewHolder, int position) {
final Post post = posts.get(position);
if (post != null) {
if (post.isLiked()) {
holder.imglike.setImageResource(R.drawable.btn_liked);
} else {
holder.imglike.setImageResource(R.drawable.btn_like); // change name of this
}
}
}
public void afterLikeChanged(Post post) {
post.setIsLiked(!post.isLiked());
notifyDataChanged();
}
class MyViewHolder extends RecyclerView.ViewHolder {
// super, etc...
// this is a lazy way to use it, not safe.
// You should create a listener that sends back the getAdapterPosition()
itemView.setOnClickListener(v -> afterLikeChanged(posts.get(getAdapterPosition())));
}
Теперь убедитесь, что вы правильно подключили адаптер к ресиверу. Если это работает в первый раз, а не во второй раз, кажется, что вы подключаете вещи в неправильных местах. Вместо этого используйте onPause
и onResume
.