Patrones de diseño útiles para trabajar con FragmentManager en Android

10

Al trabajar con fragmentos, he estado usando una clase compuesta de métodos estáticos que definen acciones en fragmentos. Para cualquier proyecto, podría tener una clase llamada FragmentActions, que contiene métodos similares a los siguientes:

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();
}

Normalmente tendré un método por pantalla de aplicación. Hago algo como esto cuando trabajo con pequeñas bases de datos locales (generalmente SQLite), así que lo apliqué a fragmentos, que parecen tener un flujo de trabajo similar; Aunque no estoy casado con eso.

¿Cómo ha organizado sus aplicaciones para interactuar con la API de Fragmentos, y qué (si alguno) patrones de diseño cree que aplican hacen esto?

Anthony Naddeo
fuente
1
¿Por qué tienes una clase responsable de mostrar todo tipo de fragmento? ¿No debería ser un método estático dentro de la clase Fragment dentro?
Piotr

Respuestas:

3

El patrón aceptado es tener un método de fábrica dentro de su clase de fragmento personalizado (típicamente llamado newInstance () pero oye la elección del distribuidor). Entonces su clase de fragmentos debería verse así:

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...
}

Luego, cuando crea un fragmento y lo agrega al backstack, en lugar de decir:

Fragmento de MyFragment = nuevo MyFragment ();

Puede usar el método de fábrica en lugar de la palabra clave 'nuevo'.

Leeran7742
fuente