RecyclerView: как очистить кэшированные / переработанные представления?
Я использую RecyclerView для отображения списка элементов с макетом списка. Я переключаюсь с макета списка на макет сетки, показывая только подмножество всех данных в макете сетки. Этот переключатель использует другой формат XML, чем при представлении списка.
Все это работает хорошо, за исключением того, что когда я прокручиваю, переработанные (кэшированные?) Представления макета списка заполняют сетку, смешиваясь с соответствующими элементами представления макета сетки. Другими словами, вместо того, чтобы использовать мойlayout_grid.xml
для макета каждого элемента в RecyclerView, я получаю элементы, используяlayout_list.xml
макет, но в виде сетки.
Это говорит мне, что LayoutManager работает правильно, переключаясь с списка на макет сетки. Но не все элементы представления элементов воссоздаются с использованием XML-макета сетки, а используются переработанные представления макета списка.
Я старалсяRecyclerView.removeAllViews()
, RecyclerView.removeAllViewInLayout()
, RecyclerView.swapAdapter()
(для принудительной перезагрузки адаптера), все безрезультатно.
Обновить:
Если я прокручиваю две позиции вниз в списке, а затем переключаюсь из списка в сетку, первые две позиции не проходят через onCreateViewHolder (), а направляются прямо в onBindViewHolder () и, следовательно, не вынуждены использовать XML-формат сетки. Вместо этого эти первые две позиции перерабатываются (я думаю) и отображаются в формате их списка.