Как сделать так, чтобы указанный элемент не обновлялся, когда 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