5

W moim Activity, zmienić dane bazowe HashMap dla mojego ExpandableListView, a następnie zadzwonićExpandableListView getChildrenCount nie nazywa się po danych zmieniło, co prowadzi do IndexOutOfBoundsException

((BaseAdapter) myExpandableListView.getAdapter()).notifyDataSetChanged(); 

Jednak awarii aplikacji po wywołaniu tego, unosząc IndexOutOfBoundsException .

Sprawdziłem dwukrotnie, czy mam dostęp do tych samych i właściwych danych wszędzie w adapterze, ale nie mogłem znaleźć żadnych błędów.

Odpowiedz

6

Po drobnym debugowaniu, w końcu dowiedziałem się, że, o dziwo, getChildrenCount nigdy nie jest wywoływany po tym, jak zadzwoniłem pod numer notifyDataSetChanged. W związku z tym adapter spodziewa się uzyskać tę samą liczbę dzieci, co przed aktualizacją. Po usunięciu niektórych dzieci, jest to błędne założenie i prowadzi do IndexOutOfBoundsException.

Po krótkiej zabawie odkryłem, że dla ExpandableListViews adapter musi być dostępny przez getExpandableListAdapter(), a nie przez getAdapter(). Po zmianie mojego kodu

((BaseExpandableListAdapter) myExpandableListView.getExpandableListAdapter()).notifyDataSetChanged(); 

wszystko działa teraz prawidłowo.

Mam nadzieję, że pomoże to innym deweloperom. Spędziłem kilka godzin na znajdowaniu i naprawianiu tego i prawie nie znalazłem żadnych informacji na ten temat w Internecie i StackOverflow.

Powiązane problemy