我有一个包含三列的sqlite数据库:id,日期和字符串。对于单个日期,可以有多个与之关联的字符串,因此我有多个行具有相同的日期,只有不同的字符串。
我想使用ExpandableListView来显示这些数据。我需要在SimpleCursorTreeAdapter中实现getChildrenCursor()才能将它用于此目的,但我不知道该怎么做。我查看了this,我发现它使用的是managedQuery,但我没有内容提供商,所以我无法使用它。从我understand开始,getChildrenCursor()的目的是获取一个只包含可以放在子节点中的数据的游标,但我看不出这个方法如何根据日期分隔条目,因为它只传递了一个Cursor作为参数。
答案 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上搜索“数据库规范化”。