Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ExpandableListView SimpleCorSortreeAdapter启动为空时将崩溃_Android_Expandablelistview_Android Cursoradapter - Fatal编程技术网

Android ExpandableListView SimpleCorSortreeAdapter启动为空时将崩溃

Android ExpandableListView SimpleCorSortreeAdapter启动为空时将崩溃,android,expandablelistview,android-cursoradapter,Android,Expandablelistview,Android Cursoradapter,我正在写一个Android应用程序,目标是Android 2.1版以上。我正在使用带有SimpleCorSortreeAdapter的可扩展ListView。我发现它会按照以下顺序崩溃: ExpandableListView启动时为空,即数据库中没有相应的记录。 添加记录。 返回带有ExpandableListView的屏幕。现在,显示组。 单击要展开的组,活动将被强制关闭。 经过几天的互联网搜索,然后痛苦地跟踪我的应用程序源代码,然后是Android平台源代码,问题似乎是:当Android平台

我正在写一个Android应用程序,目标是Android 2.1版以上。我正在使用带有SimpleCorSortreeAdapter的可扩展ListView。我发现它会按照以下顺序崩溃:

ExpandableListView启动时为空,即数据库中没有相应的记录。 添加记录。 返回带有ExpandableListView的屏幕。现在,显示组。 单击要展开的组,活动将被强制关闭。 经过几天的互联网搜索,然后痛苦地跟踪我的应用程序源代码,然后是Android平台源代码,问题似乎是:当Android平台启动SimpleCorSortreeAdapter时,在实例化过程中,它会在私有成员mChildFrom中存储一次子字段列表,奇怪的是,如果至少有一个组,则会存储一次。如果没有记录,因此没有组,则不会存储子字段列表。当随后添加记录以及将组扩展到显示的子行时,ExpandableListView将崩溃,因为私有成员mChildFrom为null

因此,我现在要做的是:如果数据库中有相关记录,只实例化SimpleCorSortreeAdapter。如果没有,请在OnResume期间重试实例化


如果有人有更好的原因或更好的解决方案,这将对我或其他有同样问题的穷人有所帮助。我倾向于认为这是Android平台的一个bug。

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

您能显示活动的代码吗。@Flo,我真的不想发布冗长的代码。将有与ExpandableListView、SimpleCursorTreeAdapter相关的代码,数据库访问等。如果发现问题是我独有的,而其他人无法重新创建该问题,我将再次钻取我的代码。我的解决方案似乎还可以,但我真的希望有一个更优雅/直接的解决方案。我正在做类似的事情。我遇到了一个问题,当组有0个孩子时,应用程序崩溃。如果我的理解是正确的,问题与光标无关,而是适配器的实例化。一旦适配器在没有相关记录的情况下被实例化,成员mChildFrom可能就不会被设置,活动将崩溃。啊,好的,我检查了SimpleCorSortreeAdapter源代码,看看你的问题是什么,你是对的,这与光标无关。再想一想,如示例ExpandableList2所示,在适配器实例化期间传递null游标似乎是一种推荐的方法。逻辑流程将有所不同,也许可以避免问题。为了尝试这个,我需要研究queryHandler。我可能稍后会尝试,并随后通知结果。通常您稍后会传递光标,因为您应该在自己的线程上检索它,这样UI就不会被阻止。AsyncTask对此很有用。不,在实例化过程中传递空游标不适用于2.x版本。查看Android源代码,SimpleCursorTreeAdapter在较旧和较新的Android版本中的实现非常不同。如果您想要支持具有相同实现的多个版本,这将是一场噩梦。我后悔使用ExpandableListView。在4.x版本中,我的“四处走动”功能也会出现故障,因为我需要调用startManagingCursor,这会在4.x平台中导致问题。