Мне непонятно, как получить правый курсор, если у вас несколько загрузчиков. Допустим, вы определяете два разных загрузчика с помощью:
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
или я ошибаюсь и это неправильный способ получить результаты для двух разных курсоров в одном фрагменте.
android
android-loadermanager
android-loader
Кей Глэйден
источник
источник
LoaderCallbacks
в данном случае) с более чем одним тип. Это просто работает в вашем случае, так как в обоих случаях результат будетCursor
.Loader
s. Пожалуйста, просмотрите этот stackoverflow.com/a/20839825/2818583Ответы:
В классе Loader есть метод getId () . Я надеюсь, что это вернет идентификатор, который вы связали с загрузчиком.
источник
getId()
?Используйте метод загрузчика getId () :
источник
Если у ваших загрузчиков нет ничего общего, кроме типа класса результата (здесь :)
Cursor
, вам лучше создать два отдельныхLoaderCallbacks
экземпляра (просто как два внутренних класса в вашем Activity / Fragment), каждый из которых предназначен для обработки одного загрузчика, а чем пытаться смешивать яблоки с апельсинами.В вашем случае кажется, что и источник данных, и обработка результатов различаются, что требует от вас написать дополнительный шаблонный код, чтобы идентифицировать текущий сценарий и отправить его в соответствующий блок кода.
источник
Activity
реализацииLoaderCallbacks
и переходяthis
кgetLoaderManager().initLoader()
является обеспечение того ,LoaderManager
выступает в качестве канала связи междуActivity
иLoader
черезLoaderCallbacks
. Как этот канал связи создается здесь, посколькуActivity
он не реализует,LoaderCallbacks
а создает анонимные внутренние классы?LoaderCallbacks
. Ничто не требует использованияActivity
самого какLoaderCallbacks
. Когда вам нужно, проще создать несколько каналов связи.