2011-05-31 74 views
0

我正在使用SimpleCursorTreeAdapter来填充ExpandableListView小部件。我首先向适配器提供一个Cursor对象,该对象包含listview中组节点的信息,并且我在Adapter中定义了一个方法(getChildrenCursor())来返回一个Cursor,其中包含指定组节点的子节点信息。如何从ExpandableListView控件中删除组?

一切工作正常,但我想知道如何以编程方式从ExpandableListView小部件中删除组(及其子)?我想长时间点击列表中的组项,出现一个弹出的上下文菜单,并为用户提供删除所选组项的选项。我的上下文菜单可以正常工作,但我无法弄清楚如何从列表中删除一个组。

任何人都可以提供一些建议吗?

谢谢。

+0

你可以参考[这个问题](http://stackoverflow.com/questions/4366132/delete-group-in-expandable-list) – 2011-05-31 06:39:38

+0

我最初看的是特定的回应,但不确定如何将该编码应用到使用Cursor对象查询SQLite数据库的适配器。 – cohoman 2011-05-31 13:38:53

回答

0

当用户单击上下文菜单项以删除组时,您必须删除数据库中与此组匹配的条目。在此之后,您对数据库执行新的查询并将新的光标传递给适配器。现在您的列表应该更新,删除组应该消失。

+0

感谢您的回复。所以这听起来像我将需要重新加载原始光标,只是为了删除一个组项目?这看起来效率很低,因为其他展示组的当前崩溃/展开状态将会丢失。有没有办法删除Cursor组中的单个项目并在ExpandableListView小部件中刷新这些组项目? – cohoman 2011-05-31 13:37:48

+0

好的,我认为我的工作。遵循你的建议,我做了以下工作:(1)从我的SQLite数据库表中删除了所需的记录。 (2)重新加载包含listview的组节点信息的新光标。 (3)使用listview的适配器上的setGroupCursor()方法将其设置为步骤(1)中加载的新游标。 (3)最后,在列表视图适配器上调用notifyDataSetChanged()方法来刷新列表。这一切都运行正常,列表中的节点(组)保持其原始状态。再次感谢您的帮助! – cohoman 2011-05-31 15:33:35

+0

太棒了!是的,它可能听起来有点奇怪,但是当你从你的数据模型中得到数据库时,你必须删除相应的项目以更新列表。如果能解决您的问题,请将我的答案标记为已接受 – Flo 2011-05-31 15:57:23