web-dev-qa-db-fra.com

LoaderManager avec plusieurs chargeurs: comment obtenir le bon chargeur de curseur

Pour moi, il n'est pas clair comment obtenir le curseur droit 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 selon 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 curseur droit dans onLoadFinished () parce que vous n'obtenez aucun identifiant pour identifier le bon curseur pour le bon adaptateur de curseur.

@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 ai-je tort et c'est la mauvaise façon d'obtenir des résultats pour deux adaptateurs de curseur différents dans un fragment.

116
Kay Gladen

La classe Loader a une méthode appelée getId () . J'espère que cela renvoie l'identifiant que vous avez associé au chargeur.

119
Kurtis Nusbaum

Utilisez la méthode getId () de 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;
    }
}    
32
IgorGanapolsky

Si vos chargeurs n'ont rien en commun sauf le type de classe du résultat (ici: Cursor), il vaut mieux créer deux instances LoaderCallbacks distinctes (simplement comme deux classes internes dans votre Activity/Fragment), chacun dédié à 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 passe-partout supplémentaire pour identifier le scénario actuel et à le répartir dans le bloc de code approprié.

8
BladeCoder