Para mim não está claro como obter o cursor correto se você tiver vários carregadores. Digamos que você defina dois carregadores diferentes com:
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
então em onCreateLoader () você faz coisas diferentes dependendo do id:
@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;
}
Por enquanto, tudo bem. Mas como colocar o cursor certo em onLoadFinished () porque você não obtém nenhum id para identificar o Cursor certo para o Cursoradapter certo.
@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
ou estou errado e esta é a maneira errada de obter resultados para dois adaptadores de cursor diferentes em um fragmento.
android
android-loadermanager
android-loader
Kay Gladen
fonte
fonte
LoaderCallbacks
neste caso) com mais de um tipo. Isso simplesmente funciona no seu caso, pois nas duas vezes o resultado é aCursor
.Loader
s. Acesse stackoverflow.com/a/20839825/2818583Respostas:
A classe Loader possui um método chamado getId () . Espero que isso retorne o id que você associou ao carregador.
fonte
getId()
?Use o método getId () do Loader:
fonte
Se seus carregadores não têm nada em comum, exceto o tipo de classe do resultado (aqui
Cursor
:), é melhor você criar duasLoaderCallbacks
instâncias separadas (simplesmente como duas classes internas em sua Atividade / Fragmento), cada uma dedicada a um tratamento de carregador, em vez do que tentar misturar maçãs com laranjas.No seu caso, parece que a fonte de dados e o tratamento do resultado são diferentes, o que requer que você escreva o código clichê extra para identificar o cenário atual e despachá-lo para o bloco de código apropriado.
fonte
Activity
implementarLoaderCallbacks
e passarthis
paragetLoaderManager().initLoader()
é garantir queLoaderManager
atue como canal de comunicação entreActivity
eLoader
viaLoaderCallbacks
. Como esse canal de comunicação está sendo criado aqui, já queActivity
não está implementando,LoaderCallbacks
mas sim criando classes internas anônimas?LoaderCallbacks
. Nada requer o uso doActivity
próprio comoLoaderCallbacks
. É mais simples criar vários canais de comunicação quando você precisar deles.