Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


MVP de Android con Dagger 2 – Actividad con múltiples fragmentos

He estado buscando en los ejemplos de Google Android Architecture para MVP con Dagger 2:

Https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksActivity.java

  • Cómo desactivar gradle 'modo sin conexión' en android studio?
  • Android: cómo crear Switch caso de esto?
  • Android adb (OSX Lion) no reconoce Galaxy Nexus, Jelly Bean
  • ¿Proguard trabaja para ocultar las constantes de cadena estáticas?
  • Java howto ArrayList push, pop, shift y unshift
  • Android: Cómo obtener valores de fuerza de señal 3G / UMTS
  • Pero el ejemplo es algo trivial: cada actividad tiene sólo un fragmento y el componente de la daga se construye en la actividad y se utiliza para inyectar la actividad con el presentador del fragmento.

    He intentado construir en ese ejemplo, para agregar múltiples fragmentos a una actividad y navegar entre ellos. Puesto que cada fragmento tiene su propio presentador, he movido el edificio de la pieza de la daga en el fragmento. Así que ahora tengo:

    • FragmentCallback (una interfaz que proporciona métodos para cargar fragmento1 y fragmento2)
    • Actividad (implementa FragmentCallback)
    • Fragmento1 (implementa la interfaz de vista)
    • Fragment1Contract (define interfaces de vista y presentador)
    • Fragment1Presenter (implementa la interfaz del presentador)
    • Fragmento1Componente (inyecta Fragmento1)
    • Fragment1Module (proporciona la vista y el presentador)
    • Fragmento2
    • Fragment2Contract (define interfaces de vista y presentador)
    • Fragment2Presenter (implementa la interfaz del presentador)
    • Fragment2Component (inyecta Fragment2)
    • Fragment2Module (proporciona la vista y el presentador)

    La actividad hace muy poco, solo carga el primer fragmento e implementa FragmentCallback que la vista puede usar para cambiar a otro fragmento.

    El primer fragmento tiene un botón que carga el segundo fragmento usando el FragmentCallback – que los fragmentos obtienen mediante el lanzamiento de la Actividad vía

    public void onAttach(Context context) { super.onAttach(context); callback = (FragmentCallback) context; } 

    ¿Estoy en una pista sensible aquí? Mientras que el código parece limpio con MVP estoy perdiendo algo wrt los componentes de la daga y los módulos?

    Gracias.

    Actualizar

    He mejorado un poco la situación al crear un componente y un módulo para la actividad. Cada Fragmento todavía construye el contexto de la Daga, pero ya no estoy inyectando la vista (fragmento) en el constructor del presentador – cuando el fragmento construye el contexto, se inyecta a sí mismo (por lo que tiene el presentador) entonces llama presenter.init(this) De modo que el presentador tiene ahora la vista.

    Esto reduce muy bien el número de clases, y el siguiente paso sería probar sólo la construcción del componente en la actividad, y tener el fragmento usar esto para inyectarse (sin tener que construir un nuevo componente).

  • "SetSupportActionBar (barra de herramientas)" dentro de FragmentActivity?
  • Obtención del error "dispositivo no encontrado" al ejecutar un archivo apk desde el emulador de Android
  • Desplazamiento de los indicadores de desplazamiento con clip a relleno
  • Cómo copiar archivos seleccionados de Android con adb pull
  • Android ProgressDialog con setContentView
  • Cómo detener el hilo de ASyncTask en android
  • One Solution collect form web for “MVP de Android con Dagger 2 – Actividad con múltiples fragmentos”

    Definitivamente estás en el buen camino.

    Sugiero que no utilice un solo componente en la Activity , pero instanciar un componente por separado Fragment (incluso si los componentes son los mismos). Este enfoque tiene dos ventajas:

    • Los fragmentos no están acoplados a la Activity ya otros Fragments por el propio componente (y los objetos que el componente podría almacenar en caché si utiliza los ámbitos)
    • Permite un empleo más graneado de los ámbitos (si es necesario)

    Fuera de contexto:

    Escribí una entrada en el blog sobre por qué las actividades en Android no son elementos de la interfaz de usuario . Echa un vistazo, y si sientes que tiene sentido, entonces hay un enlace a la implementación alternativa de MVP 🙂

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.