gpt4 book ai didi

android - 使用 cursor.respond(Bundle) & cursor.getextras()

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:42 27 4
gpt4 key购买 nike

我有 2 个来自 SQLite 数据库中不同表的游标。我正在尝试将来自两个游标的数​​据放入一个 ListView 但每个游标的数​​据格式不同。

我考虑的是使用 MergeCursor 来组合两个游标,但是我的 SimpleCursorAdapterViewBinder 会将它们视为单个游标并且将无法区分格式(除非我更改了我不想做的表格)。

最后,我找到了 2 个名为 Cursor.repond(Bundle)Cursor.getExtras() 的方法,但是开发人员控制台上的文档非常简短,谷歌搜索这些方法没有阐明它们的用途。

我测试了我的想法,在我的数据库类中使用 resond() 进行查询:

    extr.putString("table", the_tab);
Cursor c_in = db.rawQuery(qry, null);
c_in.respond(extr);
return c_in;

并在 ViewBinder 中使用 getExtras() 来了解查询表并相应地格式化 ListView 项目:

Bundle extr=cur.getExtras();
String tab= extr.getString("table");

但我总是遇到一个异常,即 tabnull

经过这么长的描述,我的问题是:我是否正确使用了 respondgetExtras 方法?如果没有,是否有更好的方法来解决我的问题?

最佳答案

如果你想在 getExtras 中使用 Bundle 似乎 AbstractCursor 是由 AbstractWindowedCursor 扩展的由SQLiteCursor 扩展定义了一个setExtras 方法。它的文档读取

Sets a android.os.Bundle that will be returned by getExtras(). null will be converted into android.os.Bundle.EMPTY.

根据文档,

respond 用于与 Cursor 进行带外通信。

所以答案是:

((AbstractCursor) cursor).setExtras(bundle);

那么你应该可以调用

cursor.getExtras();

稍后检索该Bundle

编辑:

进一步查看后,似乎 setExtras 出于某种原因被标记为隐藏,因此它是公开的,并且旨在按描述(和期望)使用。参见 ContactsProvider2 example

因此,我想到了使用 CursorWrapper,并覆盖那里的 getExtras 以提供 Bundle。在我的例子中,我在 CursorWrapper 中创建了 Bundle,因此我不需要设置它的方法。

@Override
public Bundle getExtras() {
return _meta_data;
}

关于android - 使用 cursor.respond(Bundle) & cursor.getextras(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com