Как сделать так, чтобы указанный элемент не обновлялся, когда notifyDataSetChanged в RecyclerView

У меня есть предмет в RecyclerView который не нужно обновлять, когда я звоню notifyDataSetChanged,

Но я не нашел никаких методов, чтобы заставить указанный элемент избегать обновления. Можно ли сделать это?


Мне нужно сделать это, потому что элемент WebView, он загрузил HTML-страницу, если я позвонил notifyDataSetChanged, этот пункт будет мигать.

Причина, по которой я отправляю этот вопрос, заключается в том, чтобы избежать WebView когда notifyDataSetChanged (см. этот вопрос). После отказа использования notifyItemRangeXXX Способы, я выкладываю этот вопрос.

Но после проверки ваших ответов и комментариев кажется, что невозможно избежать обновления при использовании notifyDataSetChanged,

3 ответа

Решение

Цель notifyDataSetChanged IS обновить все элементы. Не используйте его, если не хотите такого поведения!

Правильный подход - обновлять только те данные, которые вы изменили. Есть несколько методов, которые помогут вам сделать недействительными только нужные данные:

notifyItemChanged(int position)
notifyItemInserted(int position)
notifyItemMoved(int fromPosition, int toPosition)
notifyItemRangeChanged(int positionStart, int itemCount)
notifyItemRangeRemoved(int positionStart, int itemCount)
notifyItemRemoved(int position)

Да, это действительно возможно. notifyDataSetChanged() уведомляет RecyclerView, что все элементы в наборе данных изменились.

Так как вы не хотите, чтобы это произошло, исключите конкретные элементы.

for(int i = 0; i< mAdapter.getItemCount(); i++){
    if(i != itemPositionToExclude){
       mAdapter.notifyItemChanged(i);
    }
}

Итак, нам нужно перебрать все элементы в адаптере и вызвать notifyItemChanged() только для этих должностей which you do not want to exclude,

Вы должны думать по-другому - какие элементы должны быть обновлены. Чтобы обновить пользовательский интерфейс элемента, после изменения данных используйте метод notifyitemchanged

Другие вопросы по тегам