0

我正在编写一个 Android 应用程序(针对 Android 版本 2.1 以上)。我正在使用ExpandableListView带有SimpleCursorTreeAdapter. 我发现它会按照以下顺序崩溃:

  1. ExpandableListView启动时为空(即数据库中没有相应的记录)。
  2. 添加记录。
  3. 使用 回到屏幕ExpandableListView。现在,显示组。
  4. 点击群组展开,活动将被强制关闭。

经过几天的互联网搜索,然后痛苦地追踪我的应用程序的源代码和Android的平台源代码,
似乎问题是:当Android平台启动 ItheSimpleCursorTreeAdapter时,
它​​会在实例化过程中将子字段列表存储在 private 成员中mChildFrom一次(奇怪的是)条件是如果至少有一组。如果没有记录(因此没有组),则不存储子字段列表。当随后添加记录以及将组扩展到显示的子行时,ExpandableListView将崩溃,因为私有成员mChildFrom为空。

所以,我现在的解决方法是:只实例化SimpleCursorTreeAdapter数据库中是否有相关记录。如果没有,请在OnResume().

如果有人对崩溃有更好的理由或有更好的解决方案,这将对我(或其他有同样问题的可怜人)有所帮助。(我倾向于认为这是 Android 平台中的一个错误。)

4

1 回答 1

0

试试下面的。在 onCreate() 中实例化适配器,但将 null 作为游标参数传递。然后在 onResume() 中创建新的 Cursor 并使用changeCursor()将其传递给适配器。这样,每当您更改数据模型上的任何内容(添加、删除、编辑行)时,您总会得到一个新的光标。

于 2011-06-17T10:24:22.363 回答