2012-12-17 39 views
1

我在使用CursorLoader時遇到問題。我需要檢索給定名稱的電話和電子郵件地址。onCreateLoader()方法中的幾個遊標

我實現了LoaderManager.LoaderCallbacks<Cursor>接口的方法。問題是我需要先從表聯繫人中獲取contact_id,然後根據contact_id,我需要查詢RawContacts/Data表以獲取電子郵件和電話。

我找不到示例,您在onCreateLoader()中有多個查詢,通常您有返回new CursorLoader(...)。我有使用managedQuery(..)方法獲得聯繫人ID並將其傳遞給CursorLoader的想法,但我想這不是個好主意。任何建議?

+0

這個線程的問題是你的答案: http://stackoverflow.com/questions/7957418/loadermanager-with-multiple-loaders-how-以獲得正確的光標加載器 –

回答

2

在OnCreateLoader中,有一個id參數,您可以使用它來更改CursorLoader。

你可以做這樣的事情

onCreateLoader(int id, bundle args) { 

    switch(id) { 

     case FETCH_CONTACT_ID: { 
      //Return CursorLoader for fetching contactID 
      break; 
     } 

     case FETCH_CONTACT_INFO: { 
      //Return CursorLoader for fetching raw contacts 
      break; 
     } 
    } 
} 

OnLoadFinished(Loader loader, Cursor c) { 

    switch(loader.getId()) { 

    case FETCH_CONTACT_ID: { 
     //Contact IDs have been fetched, so start fetching raw contact data 
     //Enter the IDs you want to fetch data for in the bundle which will be passed to onCreateLoader() 
     mLoaderManager().restartLoader(FETCH_CONTACT_INFO, args); 
     break; 
    } 

    case FETCH_CONTACT_INFO: { 
     //Raw contact info has been fetched, do whatever you want with it 
     break; 
    } 
    } 
} 
+0

我想我正確理解你,我會盡力實現這一點。感謝您幫助我瞭解裝載機。 – prowebphoneapp

+0

沒問題..如果你在實現這個時遇到任何問題,只需用你的代碼對這個問題發表評論.. :-) –

+0

但是onCreateLoader()必須有返回類型。你在這裏的返回類型是什麼? –