Próbuję zmienić zawartość listy w Androidzie. Potem chcę, aby lista została przerysowana. Niestety elementy listy zmieniają się, ale stare elementy są wyświetlane w tle. Jeśli na nowej liście jest mniej elementów, wydaje się, że stare elementy wciąż są częścią listy, ponieważ są nadal wyświetlane, nawet jeśli nie można ich kliknąć. Jeśli wyskoczę z aplikacji za pomocą Menedżera zadań Android, a następnie ponownie otwórz aplikację, lista zostanie wyświetlona poprawnie! Dlatego myślę, że to musi być problem z odświeżaniem.Android Listview zachowuje stare elementy po zmianie adaptera.
Jak mogę starać się to osiągnąć:
Jak kompletnych zmian zawartości utworzyć nowy adapter, że przechodzi na ListView. W moim kodzie "ulubione" to nowa tablica, którą przekazuję do adaptera. Próbuję również wyczyścić listę i unieważnić ją. Wszystko to dzieje się w wątku UI (onPostExecute z AsyncTask)
MyAdapter newAdapter = new MyAdapter(
context, favorites);
MyAdapter current_adapter = (MyAdapter) myList.getAdapter();
if((current_adapter!=null)){
current_adapter.clear();}
myList.setAdapter(null); //inserted this because of answers, but with no effect.
myList.setAdapter(newAdapter);
myList.invalidateViews();
Klarowny metoda adaptera:
public void clear(){
items.clear();
notifyDataSetChanged();
}
Jak widać Próbowałem wszystkich rozwiązań podobnych problemów ją na stackoverflow . Niestety nic nie działało ...
Z góry dziękuję za wszelkie pomysły, jak rozwiązać ten problem.
Edit:
Próbowałem również ustawić wartość null adaptera przed przekazaniem nowego, również bez skutku. .setAdapter (null);
Jeśli otworzę klawiaturę, klikając przycisk editText, ekran zostanie odświeżony, a lista wyświetli się poprawnie.
Próbowałem tego, niestety, bez efektu. – AndroidDev23
czy to w końcu rozwiązanie? Nie działa dla mnie i mam ten sam problem. – mikus