Android MVP avec Dagger 2 – Activité avec plusieurs fragments

J'ai regardé les exemples de Google Android Architecture pour MVP avec 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

  • API audio de bas niveau pour Android
  • Forcer le widget Android à mettre à jour
  • Comment cacher ActionBar / Toolbar tout en défilant vers le bas dans le Webview
  • Connexion vpn Android via programme
  • Android: utilisez une image de profil externe dans la barre de notification comme Facebook
  • Comment supprimer la barre de titre dans Android?
  • Mais, l'exemple est plutôt trivial – chaque Activité n'a qu'un seul fragment, et le composant Dagger est construit dans l'Activité et utilisé pour injecter l'Activité avec le Présentateur pour le Fragment.

    J'ai essayé de construire sur cet exemple, d'ajouter plusieurs fragments à une activité et de naviguer entre eux. Puisque chaque fragment a son propre présentateur, j'ai déplacé le composant composant Dagger dans le Fragment. Alors maintenant j'ai:

    • FragmentCallback (une interface fournissant des méthodes pour charger fragment1 et fragment2)
    • Activité (implémente FragmentCallback)
    • Fragment1 (implémente l'interface de visualisation)
    • Fragment1Contract (définit les interfaces de présentation et de présentation)
    • Fragment1Presenter (implémente l'interface du présentateur)
    • Fragment1Component (injecte Fragment1)
    • Fragment1Module (fournit la vue et le présentateur)
    • Fragment2
    • Fragment2Contract (définit les interfaces de présentation et de présentation)
    • Fragment2Presenter (implémente l'interface du présentateur)
    • Fragment2Component (injecte Fragment2)
    • Fragment2Module (fournit la vue et le présentateur)

    L'activité fait très peu, elle ne charge que le premier fragment et implémente FragmentCallback que la vue peut utiliser pour passer à un autre fragment.

    Le premier fragment a un bouton qui charge le deuxième fragment en utilisant le FragmentCallback – que les fragments obtiennent en lançant l'Activité via

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

    Suis-je sur une voie sensible ici? Alors que le code semble propre avec le MVP, est-ce que je manque de quelque chose sur les composants et les modules des dagues?

    Merci.

    Mettre à jour

    J'ai amélioré un peu la situation en créant un composant et un module pour l'activité. Chaque Fragment construit toujours le contexte Dagger, mais je n'injecte plus la vue (fragment) dans le constructeur du présentateur – lorsque le fragment construit le contexte, s'injecte lui-même (il en a donc le présentateur), il appelle presenter.init(this) De sorte que le présentateur ait maintenant la vue.

    Cela réduit considérablement le nombre de classes, et l'étape suivante consiste à essayer uniquement de créer le composant dans l'activité, et le fragment l'utilise pour se injecter (sans avoir à créer un nouveau composant).

  • LibGDX dans Android Activity
  • Android viewview, glisser vers l'action
  • Comment modifier le texte du fragment textView de l'activité
  • Forcer Android Fast Scroll Bar sur ListViews à dessiner dans le rembourrage
  • Erreur: Android Dex: Impossible de trouver le fichier \ android-sdk-path \ platform-tools \ lib \ dx.jar
  • Est-ce que Android rétablit les extras de l'intention lors de la reprise de l'activité?
  • One Solution collect form web for “Android MVP avec Dagger 2 – Activité avec plusieurs fragments”

    Vous êtes certainement sur la bonne voie.

    Je suggère que vous n'utilisez pas un seul composant dans Activity , mais instanciez un composant distinct par Fragment (même si les composants sont identiques). Il y a deux avantages à cette approche:

    • Les fragments ne sont pas couplés à Activity et à d'autres Fragments par le composant lui-même (et les objets que le composant pourrait mettre en cache si vous utilisez des étendues)
    • Permet un emploi plus fin de l'étendue (si jamais vous en avez besoin)

    Hors sujet:

    J'ai écrit une publication sur le blog pour savoir pourquoi les activités dans Android ne sont pas des éléments d'interface utilisateur . Jetez un oeil, et si vous avez l'impression que cela a du sens, alors il existe un lien vers une mise en œuvre alternative du MVP 🙂

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.