2014-07-23 45 views
0

我使用的是用填充使用SimpleCursorAdapter從SQLLite數據庫中的數據的ListView片段的LoaderManager傳遞一個查詢到裝載機經理片段..從活動

公共類TimelineFragment擴展ListFragment實現LoaderCallbacks {}

此片段「顯示」,因爲它在主要活動的xml中被引用。

一切正常,在ContentProvider CRUD操作中的notifyChange反映了任何添加或刪除操作(對數據庫的實際更改)。

我希望實現一個基於用戶的查詢函數,但是在處理MainActivity中的LoaderManager時遇到了很多麻煩。

我需要發送一個sql選擇字符串到LoaderManager來重新查詢數據庫。我如何從MainActivity內做到這一點?

任何幫助將不勝感激......

回答

0

我做了一個解決方法。我將片段代碼帶入主活動代碼。這避免了我所用的加載器在本地的引用問題。 可能不是最佳做法,但作爲一個破解它的工作...

0

您可以發送來自加載器回調onCreateLoader(INT ID,最終捆綁args)的查詢。

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

在你與初始化

getSupportLoaderManager()initLoader(ID_LOADER,捆綁,這一點)裝載機的活性。;

您傳遞到您需要查詢sqllitedatabase

捆綁包=新軟件包捆綁參數();

bundle.putInt( 「pathToUri」, 「someData」)

在裝載機回調onCreateLoader

然後(INT ID,最後捆綁參數) 您可以訪問 「someData」 字符串uriPath = bundle.getInt( 「pathToUri」)+ 「」;

然後您創建URI: Uri selectQueryUri = CONTENT_URI.buildUpon()。appendPath(uriPath).build(); 並創建查詢: getContentResolver()。query(selectQueryUri,........)

dataProvider實現查詢。

不要忘記在一個restartLoader中添加一個Bundle arg。 如果您傳入null,則應用程序將崩潰。 getSupportLoaderManager()。restartLoader(ID_LOADER,bundle,this);