5

In meinem Activity ich die zugrunde liegenden Daten ändern HashMap für meine ExpandableListView und dannExpandableListView getChildrenCount nicht nach Daten genannt geändert, um IndexOutOfBoundsException führende

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

Allerdings rufen die App stürzt ab, nachdem dieser Aufruf, eine IndexOutOfBoundsException Anhebung .

Ich habe überprüft, dass ich auf die gleichen und richtigen Daten überall im Adapter zugreifen, konnte aber keine Fehler finden.

Antwort

6

Nach ein wenig Debugging, habe ich endlich herausgefunden, dass seltsamerweise getChildrenCount nie aufgerufen wird, nachdem ich notifyDataSetChanged aufgerufen habe. Daher erwartet der Adapter immer noch die gleiche Anzahl von Kindern wie vor dem Update. Wie ich einige Kinder entfernte, ist das eine falsche Annahme, und führt zum IndexOutOfBoundsException.

Nach ein bisschen herumspielen entdeckte ich, dass für ExpandableListViews der Adapter über getExpandableListAdapter() zugegriffen werden muss, nicht über getAdapter(). Nach meinem Code

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

Alles ändert funktioniert jetzt.

Ich hoffe, das hilft jedem anderen Entwickler. Ich habe ein paar Stunden damit verbracht, das zu finden und zu beheben und fand kaum Informationen darüber im Web und StackOverflow.