我在一个片段中使用LoaderManager,该片段使用SimpleCursorAdapter使用来自SQLLite数据库的数据填充ListView。
公共类TimelineFragment扩展了ListFragment实现LoaderCallbacks {}
此片段显示为#34;因为它是在主要活动的xml中引用的。
一切运行良好,ContentProvider CRUD操作中的notifyChange反映了任何添加或删除(对数据库的实际更改)。
我希望实现基于用户的查询功能,但是在如何从MainActivity中访问LoaderManager时遇到了很多麻烦。
我需要向LoaderManager发送一个sql选择字符串来重新查询数据库。我如何在MainActivity中执行此操作?
非常感谢任何帮助......
答案 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);