LoaderManager с несколькими загрузчиками: как получить правильный курсор-загрузчик - PullRequest
116 голосов
/ 31 октября 2011

Мне не понятно, как получить правильный курсор, если у вас есть несколько загрузчиков. Допустим, вы определяете два разных загрузчика с помощью:

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

затем в onCreateLoader () вы делаете разные вещи в зависимости от идентификатора:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {

    if (id==0){
               CursorLoader loader = new CursorLoader(getActivity(),
            MaterialContentProvider.CONTENT_URI,null,null,null,null);
    }else{
               CursorLoader loader = new CursorLoader(getActivity(),
            CustomerContentProvider.CONTENT_URI,null,null,null,null);
            };
    return loader;
} 

пока все хорошо. Но как получить правильный курсор в onLoadFinished () , потому что у вас нет идентификатора для определения правильного курсора для правильного Cursoradapter.

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {


    mycursoradapter1.swapCursor(cursor);
    if(isResumed()){
        setListShown(true);
    }else {
        setListShownNoAnimation(true);
    }



}
//and where to get the cursor for mycursoradapter2

или я ошибаюсь, и это неправильный способ получения результатов для двух разных cursoradapter в одном фрагменте.

Ответы [ 3 ]

119 голосов
/ 31 октября 2011

В классе Loader есть метод с именем getId () . Я надеюсь, что это вернет идентификатор, который вы связали с загрузчиком.

32 голосов
/ 23 января 2014

Используйте getId () метод Loader:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    switch (loader.getId()) {
        case 0:
            // do some stuff here
            break;
        case 1:
            // do some other stuff here
            break;
        case 2:
            // do some more stuff here
            break;
        default:
            break;
    }
}    
8 голосов
/ 20 апреля 2014

Если ваши загрузчики не имеют ничего общего, кроме типа класса результата (здесь: Cursor), вам лучше создать два отдельных экземпляра LoaderCallbacks (просто как два внутренних класса в вашей Деятельности / Фрагменте), каждый из них посвящен одной загрузке, вместо того, чтобы пытаться смешать яблоки с апельсинами.

В вашем случае кажется, что и источник данных, и обработка результата различны, что требует написания дополнительного стандартного кода для идентификации текущего сценария и отправки его в соответствующий блок кода.

...