帮助SimpleCursorTreeAdapter和getChildrenCursor()

时间:2011-03-05 06:33:50

标签: android sqlite

我有一个包含三列的sqlite数据库:id,日期和字符串。对于单个日期,可以有多个与之关联的字符串,因此我有多个行具有相同的日期,只有不同的字符串。

我想使用ExpandableListView来显示这些数据。我需要在SimpleCursorTreeAdapter中实现getChildrenCursor()才能将它用于此目的,但我不知道该怎么做。我查看了this,我发现它使用的是managedQuery,但我没有内容提供商,所以我无法使用它。从我understand开始,getChildrenCursor()的目的是获取一个只包含可以放在子节点中的数据的游标,但我看不出这个方法如何根据日期分隔条目,因为它只传递了一个Cursor作为参数。

3 个答案:

答案 0 :(得分:0)

public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {

    public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout,
            int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom,
            int[] childrenTo) {
        super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom,
                childrenTo);
    }

    @Override
    @SuppressWarnings("deprecation")
    protected Cursor getChildrenCursor(Cursor groupCursor) {
        // Given the group, we return a cursor for all the children within that group 
        // Return a cursor that points to this contact's phone numbers
        Uri.Builder builder = People.CONTENT_URI.buildUpon();
        ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));
        builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);
        Uri phoneNumbersUri = builder.build();
        // The returned Cursor MUST be managed by us, so we use Activity's helper
        // functionality to manage it for us.
        return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null);
    }
}

答案 1 :(得分:0)

我知道这已经晚了8个月,但仍然。

您可以在没有内容提供商的情况下创建游标。打开SQLite数据库并执行db.query(...) - 这将为您创建一个游标。这与内容提供商创建游标的方式相同。

答案 2 :(得分:0)

如果您不想使用ContentProvider,请尝试在AsyncTask中运行查询。然后使用onPostExecute中的changeCursor方法替换Cursor。

不应使用

managedQuery,因为它已在API 11中折旧。

groupCursor对象可用于表示获取“_id”以用于查询其子数据。比如SELECT * FROM'TABLE'WHERE ID = ?. “?”是组游标中的ID列,很可能将其用作另一个表上的外键。如果您仍然感到困惑,请尝试在Google上搜索“数据库规范化”。