数据更改后未调用ExpandableListView getChildrenCount,导致IndexOutOfBoundsException

时间:2013-06-24 10:45:55

标签: android expandablelistview indexoutofboundsexception notifydatasetchanged

在我的Activity中,我更改了HashMap的基础数据ExpandableListView,然后调用

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

但是,在调用此应用程序后,应用程序崩溃,引发IndexOutOfBoundsException

我仔细检查了我在适配器的每个地方访问相同和正确的数据,但找不到任何错误。

2 个答案:

答案 0 :(得分:6)

经过一些调试后,我终于发现,奇怪的是,在我调用getChildrenCount后,notifyDataSetChanged从未被调用过。因此,适配器仍然期望获得与更新之前相同数量的子节点。 当我删除一些孩子时,这是一个错误的假设,并导致IndexOutOfBoundsException

经过一段时间的游戏,我发现对于ExpandableListViews,必须通过getExpandableListAdapter()访问适配器,而不是通过getAdapter()。 将我的代码更改为

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

现在一切正常。

我希望这可以帮助任何开发人员。我花了几个小时找到并解决了这个问题,很难在网络和StackOverflow上找到任何关于它的信息。

答案 1 :(得分:0)

listAdapter.notifyDataSetChanged()
               
val groupPosition = 0
expandableListView.expandGroup(groupPosition, true)

我通过在调用 expandableListView.expandGroup() 后添加方法 notifyDataSetChanged() 解决了我的问题。