ExpandableListView,CursorTreeAdapter和游标管理

时间:2011-08-03 13:13:34

标签: android cursor expandablelistview

尝试使用ExpandableListView和CursorTreeAdapter。这里引用Android手册:

protected abstract Cursor getChildrenCursor(Cursor groupCursor) ... 您有责任通过Activity生命周期管理此Cursor。在某些情况下,适配器会自行停用Cursor,但情况并非总是如此,因此请确保正确管理Cursor。

好的,我在Google上找到了一些例子,并编写了以下代码:

@Override
protected Cursor getChildrenCursor( Cursor groupCursor ) {
    int groupID = groupCursor.getInt( groupIDColumn );
    Cursor c = dbAdapter.getHostsCursor( "where expression", groupID );
    startManagingCursor( c );
    return c;
}

此代码有效,但ExpandableListView会在组的每次点击时请求新光标以展开它。将创建新游标并将其添加到Activity的托管游标列表中。

但旧游标会发生什么?在哪里可以关闭旧的,未使用的光标,如果我负责根据Google手册管理游标,请调用stopManagingCursor()?如果有人点击展开和折叠组,那么app会因堆栈溢出或系统资源泄漏而崩溃的速度有多快?

请指出正确的方向。

1 个答案:

答案 0 :(得分:0)

考虑以下两种选择:


  1.   

    getChildrenCursor()返回一个不会长寿的游标。

         

    更新UI,然后处理光标。

  2.   

    每个组都有一个光标。

         

    没有优化空间。


  3. 选择1 可能是真的