Pour moi, il n'est pas clair comment obtenir le bon curseur si vous avez plusieurs chargeurs. Disons que vous définissez deux chargeurs différents avec:
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
puis dans onCreateLoader () vous faites différentes choses en fonction de l'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;
}
jusqu'ici tout va bien. Mais comment obtenir le bon curseur dans onLoadFinished () car vous n'obtenez aucun identifiant pour identifier le bon curseur pour le bon 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
ou je me trompe et c'est la mauvaise façon d'obtenir des résultats pour deux curseurs différents dans un fragment.
android
android-loadermanager
android-loader
Kay Gladen
la source
la source
LoaderCallbacks
dans ce cas) avec plus d'un type. Cela fonctionne simplement dans votre cas puisque les deux fois, le résultat est un fichierCursor
.Loader
s. Veuillez parcourir ce stackoverflow.com/a/20839825/2818583Réponses:
La classe Loader a une méthode appelée getId () . J'espère que cela renvoie l'identifiant que vous avez associé au chargeur.
la source
getId()
?Utilisez la méthode getId () de Loader:
la source
Si vos chargeurs n'ont rien en commun à part le type de classe du résultat (ici :)
Cursor
, vous feriez mieux de créer deuxLoaderCallbacks
instances distinctes (simplement comme deux classes internes dans votre Activité / Fragment), chacune dédiée à un traitement de chargeur, plutôt que d'essayer de mélanger des pommes avec des oranges.Dans votre cas, il semble que la source de données et le traitement des résultats soient différents, ce qui vous oblige à écrire le code standard supplémentaire pour identifier le scénario actuel et l'envoyer au bloc de code approprié.
la source
Activity
mise en œuvreLoaderCallbacks
et passantthis
àgetLoaderManager().initLoader()
faire en sorte queLoaderManager
agit en tant que canal de communication entreActivity
etLoader
par l' intermédiaireLoaderCallbacks
. Comment ce canal de communication est-il créé iciActivity
sans implémenterLoaderCallbacks
mais plutôt créer des classes internes anonymes?LoaderCallbacks
. Rien ne nécessite d'utiliser leActivity
lui - même commeLoaderCallbacks
. Il est plus simple de créer plusieurs canaux de communication lorsque vous en avez besoin.