【问题标题】:Passing a query to a loader manager in a fragment from an activity在活动的片段中将查询传递给加载器管理器
【发布时间】:2017-03-10 23:15:36
【问题描述】:

我在片段中使用 LoaderManager,该片段使用 SimpleCursorAdapter 使用 SQLLite 数据库中的数据填充 ListView。

公共类 TimelineFragment 扩展 ListFragment 实现 LoaderCallbacks { }

这个片段被“显示”,因为它在主活动的 xml 中被引用。

一切正常,ContentProvider CRUD 操作中的 notifyChange 反映了任何添加或删除(数据库的实际更改)。

我希望实现一个基于用户的查询功能,但是在弄清楚如何从 MainActivity 中访问 LoaderManager 时遇到了很多麻烦。

我需要向 LoaderManager 发送一个 sql 选择字符串来重新查询数据库。如何在 MainActivity 中执行此操作?

任何帮助将不胜感激...

【问题讨论】:

    标签: java android sql android-fragments


    【解决方案1】:

    我做了一个解决方法。我将片段代码带到了主要活动代码中。这避免了我遇到的引用问题,因为加载器是类本地的。 可能不是最佳实践,但作为 hack,它确实有效......

    【讨论】:

      【解决方案2】:

      您可以从加载器回调 onCreateLoader(int id, final Bundle args) 发送查询。

      你可以看到 onCreateLoader 需要一个 Bundle 参数。

      在活动中,您使用

      初始化加载器

      getSupportLoaderManager().initLoader(ID_LOADER,bundle,this);

      你传入一个你需要查询 sqllitedatabase 的包参数

      捆绑捆绑=新捆绑();

      bundle.putInt("pathToUri","someData")

      然后在一个 Loader 回调中 onCreateLoader(int id, final Bundle args) 你可以访问那个“someData” String uriPath=bundle.getInt("pathToUri")+"";

      然后你创建 URI : URI selectQueryUri=CONTENT_URI.buildUpon().appendPath(uriPath).build(); 并创建一个查询: getContentResolver().query(selectQueryUri,........)

      dataProvider 实现查询。

      不要忘记在 restartLoader 中添加一个 Bundle 参数。 相反,如果您传入 null,则应用程序将崩溃。 getSupportLoaderManager().restartLoader(ID_LOADER, bundle, this);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        相关资源
        最近更新 更多