In my Activity
, I change the underlying data HashMap
for my ExpandableListView
, and then call
((BaseAdapter) myExpandableListView.getAdapter()).notifyDataSetChanged();
However, the app crashes after calling this, raising an IndexOutOfBoundsException
.
I double-checked that I access the same and right data everywhere in the adapter, but could not find any mistakes.
After a bit of debugging, I finally found out that, strangely enough, getChildrenCount
is never called after I called notifyDataSetChanged
. Thus, the Adapter is still expecting to get the same number of children as there were before the update.
As I removed some children, that's a wrong assumption, and leads to the IndexOutOfBoundsException
.
After a bit of playing around, I discovered that for ExpandableListViews
, the Adapter has to be accessed via getExpandableListAdapter()
, not via getAdapter().
After changing my code to
((BaseExpandableListAdapter) myExpandableListView.getExpandableListAdapter()).notifyDataSetChanged();
Everything works fine now.
I hope this helps any fellow developers. I spent a few hours finding and fixing this, and hardly found any information about it on the web and StackOverflow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With