【问题标题】:LoaderManager/CursorLoader for several cursors?LoaderManager/CursorLoader 用于几个游标?
【发布时间】:2013-06-05 05:49:15
【问题描述】:

我有两个 SQLite 表:
Service: sid (prim.key), workDesc, title
ServiceInstance: ssid (prim.key), sid(外键)、日期、工作注释、里程表

今天我使用 CustomAdapter 扩展 SimpleCursorAdapter 来为 ListView 提供这些表中的数据。但由于此方法已被弃用,我想改用 LoaderManager/CursorLoader 重构代码。

现在,我的困惑是,在 ListView 中,我想显示 ServiceInstance 表中的日期和 Service 表中的标题。喜欢:
2013-06-05 定期服务

我该怎么做?从现在开始,当我使用扩展的 SimpleCursorAdapter 类时,我正在向构造函数发送一个游标。但是在这种情况下,当我稍微更改数据库结构时,我需要显示来自两个不同游标(Service 和 ServiceInstance)的数据。

我已经用谷歌搜索并阅读了一些教程,但没有发现任何类似的案例。但在这里,http://www.mysamplecode.com/2012/11/android-database-content-provider.html

在他们声明字符串数组列的地方(第 6 步,MainActivity.java:58),我可以只添加列名(日期和标题),即使它们存在于不同的表中?

另一个问题,我不打算将这些数据提供给其他应用程序,那么创建一个 ContentProvider 是否有意义?

【问题讨论】:

    标签: android android-listview android-cursoradapter android-loadermanager android-cursorloader


    【解决方案1】:

    在您的情况下,不必绑定到两个不同的游标(我不建议这样做,因为在这种情况下您必须编写自己的适配器)。
    尝试跨表查询,检查这个作为起点:

    对于第二个问题,如果您不想将 ContentProvider 暴露给其他应用程序集:

    <provider
        ....
        android:exported="false">
    </provider>
    

    在您的清单中

    【讨论】:

    • 关于我的第二个问题,我想知道我应该将什么传递给 CursorLoader 构造函数,因为它需要一个 URI 作为第二个参数?
    • 内容提供商中定义的 Uri,如果您需要示例,请告诉我(我正在度假,下周将回到电脑前)。
    • 我知道,但我不打算将这些数据提供给其他应用程序,所以可以不使用 ContentProvider 吗?还是创建一个更好?
    • 我会创建一个,并且只需设置 android:exported="false",设置后使用起来很方便,您可以在没有内容提供程序的情况下使用 CursorLoader,但它需要一些解决方法。我不会推荐它。
    • 感谢您的建议!变通办法不是我所追求的,所以我将创建一个而不是导出它。只需要找到一个好的例子,你有一个可用的吗?
    猜你喜欢
    • 2012-06-16
    • 2011-09-16
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多