2014-03-03 28 views
2

我有一個使用MyCursorAdapterMyListFragment實現。正如名稱所示,它們都擴展了各自的Android類。使用LoaderManager和CursorAdapter的CRUD

我通過this Loader/LoaderManager tutorial閱讀。所以,現在我的查詢發生在

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(blah1, blah2, blah3, blah4, blah5, blah6); 
} 

LoaderManager裝載機一起照顧的時候重新查詢和更新,運行獨立的線程進行查詢,而不必我擔心它同步。到現在爲止還挺好。

我有2個問題:

1)我實現了一個MyContentProvider。這是怎麼形成的?
- >看起來上述new CursorLoader(......)通過MyContentProvider進行查詢,因爲它使用URI作爲第一個參數。

2)我還需要在列表中刪除/更新/插入項。我是否應該在MyListFragment內的MyContentProvider的所需位置撥打我的相應方法?如果是,那麼我是否也可以手動加載這些項目,而不需要加載器來處理它?如果不是,那麼正確的方法要做什麼?我沒有在網上找到任何信息。任何指針讚賞。

回答

1
  1. 是的,這就是正確的,它會調用查詢方法MyContentProvider與在CursorLoader構造函數中使用的參數。

  2. 如果我的理解是正確的答案是肯定的,你可以直接調用MyContentProvider方法,只要他們呼籲ContentResolver.notifyChange(),因爲它會導致CursorLoader得到一個新的光標(這是使用CursorLoader整點)。使用CursorLoader時,如果可以,應儘量避免手動更改數據,以便允許顯示始終反映來自MyContentProvider的當前數據集。

+0

啊,好的。感謝你的回答!這就說得通了。我沒有使用'ContentResolver.notifyChange()',所以想知道把加載器放在哪個地方。但現在我明白了,一切都連接起來了! – rgamber

+0

但是,如果在我目前的CursorLoader中,我還更新屬於同級片段的一些數據。這沒有得到更新。看起來我仍然缺少一些東西。 – rgamber

+0

只要爲正在使用的URI調用notifyChange,就應該更新它。 –