В виджетах ListView
ListView
будут сохранены представления, полученные из метода getView
адаптера во внутреннем классе RecycleBin
.
Как очистить представления в RecycleBin
и заставить ListView
воссоздать все дочерние представления.
В виджетах ListView
ListView
будут сохранены представления, полученные из метода getView
адаптера во внутреннем классе RecycleBin
.
Как очистить представления в RecycleBin
и заставить ListView
воссоздать все дочерние представления.
Если я правильно помню, вызов invalidate
на виджет ListView
будет очищать кеш Views
, который в настоящее время хранится. Я бы посоветовал не опустошать кеш просмотров ListView
из-за потенциальных проблем с производительностью.
Если вы не собираетесь использовать элемент convertView
, тогда вам будет нужно каждый раз создавать представление строки (в результате получается много объектов, созданных каждый раз, когда пользователь прокручивает) + дополнительная занимаемая память по переработанным представлениям из RecycleBin
, которые никогда не будут использоваться в любом случае.
Вызов invalidate() или invalidateViews() не помогло (как указано в правильном ответе). Переработанные виды сохранялись в ListView. Мне нужно было найти исходный код Android, чтобы найти решение. Я проверил множество методов, в том числе метод setAdapter() класса ListView (API Android 15):
@Override
public void setAdapter(ListAdapter adapter) {
// ...
mRecycler.clear();
// ...
}
Как вы заметили, установка адаптера очищает переработчик, который содержит все переработанные виды в виде списка. Вам не нужно создавать новый адаптер, достаточно установить один и тот же адаптер, чтобы очистить список переработанных просмотров в представлении списка:
Adapter adapter = listview.getAdapter ();
// ... Modify adapter ... do anything else you need to do
// To clear the recycled views list :
listview.setAdapter ( adapter );
В ListView
- reclaimViews(List<View>)
есть специальный метод. Он перемещает все элементы, которые в настоящее время используются и в корзине, в указанный список. Widget будет запрашивать новые представления для элементов из Adapter
перед рендерингом в следующий раз.
Вы можете использовать восстановленные представления, если изменений в структуре элементов не так много или полностью их обрывать. Например, я использую этот метод для динамического обновления фона для элементов, когда пользовательский цвет выбора был изменен.
Удалите объект корзины из ArrayList или структуру данных, которую вы использовали в своем пользовательском адаптере, а также вызовите метод notifyDataSetChanged
вашего адаптера.