将查询传递给活动片段中的加载程序管理器

时间:2014-07-23 00:53:05

标签: java android sql android-fragments

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

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

此片段显示为#34;因为它是在主要活动的xml中引用的。

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

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

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

非常感谢任何帮助......

2 个答案:

答案 0 :(得分:0)

我做了一个解决方法。我将片段代码带到了主活动代码中。这避免了我所引用的引用问题,因为加载器是本地的。 可能不是最好的做法,但作为一个黑客它工作...

答案 1 :(得分:0)

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

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

在活动中,您使用

初始化加载程序

getSupportLoaderManager()initLoader(ID_LOADER,捆绑,这一点);

您传入需要查询sqllitedatabase

的包参数

Bundle bundle = new Bundle();

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()。查询(selectQueryUri,........)

dataProvider实现查询。

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