2

我在ViewPager中有一個叫做AllSongsFragment的片段。父母Activity延伸android.support.v4.app.FragmentActivityLoaderManager和CursorLoader不能在ViewPager的片段中工作

我試圖執行LoaderManagerCursorLoader以異步獲取遊標。下面是AllSongsFragment

import android.support.v4.app.Fragment; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.Loader; 
import android.support.v4.content.CursorLoader; 

public class AllSongsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { 
public void onActivityCreated(Bundle savedInstanceState) { 
    . 
    . 
    getLoaderManager().initLoader(0, null, this); 
} 


@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    Toast.makeText(getActivity(), "YAYYYY", Toast.LENGTH_SHORT); 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String[] projection = new String[] {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST}; 
    CursorLoader cursorLoader = new CursorLoader(getActivity(), uri, projection, null, null, null); 
    return cursorLoader; 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    Toast.makeText(getActivity(), "finished", Toast.LENGTH_SHORT); 
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    // TODO 
} 
} 

我的問題是onCreateLoader()或任何LoaderManager回調方法沒有得到所謂的。該應用程序不會崩潰,並且沒有例外。我究竟做錯了什麼?

+0

我原來的代碼是實際工作。獲得的教訓:切勿使用Toasts確認方法調用。取而代之的是使用android.util.Log – DavidH 2015-04-02 16:01:32

+0

我現在意識到我沒有在Toast上調用show()。我多麼愚蠢。 – DavidH 2015-08-16 08:29:59

回答

4

您正在使用支持庫類LoaderManagerCursorLoader。因此您需要使用支持LoaderManager的呼叫。

更換

getLoaderManager().initLoader(0, null, this); 

getActivity().getSupportLoaderManager().initLoader(0, null, (LoaderCallbacks<Cursor>)this); 
+0

現在看來,onLoaderReset()被調用時通過按回來銷燬活動。如果我嘗試在onLoaderReset()中做一個Toast,那麼我得到一個NullPointerException,它必須是因爲活動被銷燬並且getActivity()返回null。但是,onCreateLoader()仍然未被調用。我使用支持庫的唯一原因是因爲沒有它,不可能使用FragmentPagerAdapter。 – DavidH 2015-04-02 12:59:55

+0

是的,我明白這一點。但它現在應該工作。我不明白爲什麼它不適合你。更多細節? – 2015-04-02 13:46:26

+0

我不知道任何其他與問題相關的代碼。在另一個線程上,與我具有相同設置的人說,使用getLoaderManager.initLoader()解決了他的問題。在另一個線程中,有人說,LoaderManager在沒有調用forceLoad()的情況下永遠不會工作。所以我想弄清楚如何調用這個方法。 – DavidH 2015-04-02 14:15:45

相關問題