内容加载器反转光标顺序
Content loader reverse cursor order
我有一个简单的聊天应用程序。我正在使用内容加载器在频道内显示消息。因为我想要 100 条最近的消息,所以我根据时间戳 desc 对消息进行排序并将其限制为 100。但我想在屏幕底部显示最近的消息。现在光标适配器首先显示最近的消息。如何反转光标的顺序?
根据我的说法,我将不得不在内容提供者中编写一些智能查询,或者必须以某种方式在游标适配器的 bindView 中操作游标。
尝试根据时间戳 ASC
而不是 DESC
.
对邮件进行排序
编辑:抱歉,没领会这里的微妙之处。
您可以尝试这样以相反的顺序获取数据:
for (cursor.moveToLast(); !cursor.isBeforeFirst(); cursor.moveToPrevious())
{
// do your magic
}
我可能会使用子查询
SELECT * FROM table ORDER BY timestamp WHERE _id
IN (SELECT _id FROM table ORDER BY timestamp DESC LIMIT 100)
与内容提供商一起使用:
String sel = BaseColumns._ID + " IN (SELECT " + BaseColumns._ID +
" FROM " + MyDb.TableName._TABLE_NAME + " ORDER BY " +
MyDb.TableName.TIMESTAMP + " DESC LIMIT 100)";
Cursor q = getContentResolver().query(MyDb.TableName.CONTENT_URI,
null, sel, null, MyDb.TableName.TIMESTAMP);
MyDb 是你的 class 定义表及其字段、UriS 等
我有一个简单的聊天应用程序。我正在使用内容加载器在频道内显示消息。因为我想要 100 条最近的消息,所以我根据时间戳 desc 对消息进行排序并将其限制为 100。但我想在屏幕底部显示最近的消息。现在光标适配器首先显示最近的消息。如何反转光标的顺序? 根据我的说法,我将不得不在内容提供者中编写一些智能查询,或者必须以某种方式在游标适配器的 bindView 中操作游标。
尝试根据时间戳 ASC
而不是 DESC
.
编辑:抱歉,没领会这里的微妙之处。
您可以尝试这样以相反的顺序获取数据:
for (cursor.moveToLast(); !cursor.isBeforeFirst(); cursor.moveToPrevious())
{
// do your magic
}
我可能会使用子查询
SELECT * FROM table ORDER BY timestamp WHERE _id
IN (SELECT _id FROM table ORDER BY timestamp DESC LIMIT 100)
与内容提供商一起使用:
String sel = BaseColumns._ID + " IN (SELECT " + BaseColumns._ID +
" FROM " + MyDb.TableName._TABLE_NAME + " ORDER BY " +
MyDb.TableName.TIMESTAMP + " DESC LIMIT 100)";
Cursor q = getContentResolver().query(MyDb.TableName.CONTENT_URI,
null, sel, null, MyDb.TableName.TIMESTAMP);
MyDb 是你的 class 定义表及其字段、UriS 等