Modèles de conception utiles pour travailler avec FragmentManager sur Android

10

Lorsque je travaille avec des fragments, j'utilise une classe composée de méthodes statiques qui définissent les actions sur les fragments. Pour tout projet donné, je pourrais avoir une classe appelée FragmentActions, qui contient des méthodes similaires à ce qui suit:

public static void showDeviceFragment(FragmentManager man){
    String tag = AllDevicesFragment.getFragmentTag();

    AllDevicesFragment fragment = (AllDevicesFragment)man.findFragmentByTag(tag);

    if(fragment == null){
        fragment = new AllDevicesFragment();
    }

    FragmentTransaction t = man.beginTransaction();
    t.add(R.id.main_frame, fragment, tag);

    t.commit();
}

J'ai généralement une méthode par écran d'application. Je fais quelque chose comme ça quand je travaille avec de petites bases de données locales (généralement SQLite) donc je l'ai appliqué à des fragments, qui semblent avoir un flux de travail similaire; Mais je ne suis pas mariée avec ça.

Comment avez-vous organisé vos applications pour interfacer avec l'API Fragments, et quels modèles de conception (le cas échéant) pensez-vous appliquer pour cela?

Anthony Naddeo
la source
1
Pourquoi avez-vous une classe chargée de montrer toutes sortes de fragments? Cela ne devrait-il pas être une méthode statique à l'intérieur de la classe Fragment à l'intérieur?
Piotr

Réponses:

3

Le modèle accepté est d'avoir une méthode d'usine dans votre classe de fragments personnalisée (généralement appelée newInstance () mais bon choix du revendeur). Votre classe de fragment devrait donc ressembler à ceci:

public class MyFragment extends Fragment
{
    public static MyFragment newInstance()
    {
        MyFragment newFragment = new MyFragment();
        // add any bundle arguments here if needed
        return newFragment;
    }
    // rest of fragment class...
}

Ensuite, lorsque vous créez un fragment et l'ajoutez au backstack, au lieu de dire:

Fragment MyFragment = nouveau MyFragment ();

Vous pouvez utiliser la méthode d'usine au lieu du mot-clé «nouveau».

Leeran7742
la source