Quelle est la manière correcte d'obtenir un inflateur de mise en page dans Android?

Il existe un moyen d'obtenir layoutInflater:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Et une autre façon est:

  • Performance Android: «Évitez les récepteurs internes / Setters»
  • Comment obtenir l'index sélectionné d'un RadioGroup dans Android
  • Comment faire de mes TextView une largeur de moitié de son parent?
  • Implémentez deux interfaces dans une classe anonyme
  • Android Studio: créez un projet Java sans dépendances Android
  • Jeu Android Multitouch
  •  LayoutInflater inflater = LayoutInflater.from(context); 

    Un troisième (quand je suis dans une activité) est:

     LayoutInflater inflater = getLayoutInflater(); 

    Alors, quelle est la différence entre eux?

    Notez que lorsque j'ai envoyé le troisième gonflage à mon adaptateur, ma demande a fonctionné. Mais quand j'ai envoyé le contexte et créé le gonflage par la deuxième voie, ce n'était pas le cas!

  • Disposition inconditionnelle, inflation de l'adaptateur de vue: devrait utiliser le motif View Holder
  • Quelle est la différence entre LayoutInflater's Factory et Factory2
  • Quelle est la différence entre appeler LayoutInflater directement et non?
  • Est-il recommandé de vérifier la vue nulle avec chaque appel findViewById?
  • 4 Solutions collect form web for “Quelle est la manière correcte d'obtenir un inflateur de mise en page dans Android?”

    Il n'y a pas beaucoup de différence entre eux.

    Comme doc dit public abstract Object getSystemService (String name)

    Un LayoutInflater pour gonfler les ressources de mise en page dans ce contexte.

    Et pour le LayoutInflater statique public de (contexte contextuel)

    Obtient le LayoutInflater à partir du contexte donné.

    Vous pouvez vérifier ce thread Existe-t-il une différence entre getLayoutInflater () et .getSystemService (Context.LAYOUT_INFLATER_SERVICE)

    Utiliser en dehors de votre activité

      LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); 

    Dans votre activité

      LayoutInflater inflater = getLayoutInflater(); 

    Vérifie ça

    Si vous ouvrez la source Android, vous pouvez voir que la méthode LayoutInflator.from ressemble à ceci:

      /** * Obtains the LayoutInflater from the given context. */ public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError("LayoutInflater not found."); } return LayoutInflater; } 

    Et il n'y a pas de différence

    Tant que l'activité ou la fenêtre qui appelle getLayoutInflater() a le même contexte qui appellerait getSystemService() , il n'y a pas de différence.

    La seule différence est le contexte que vous utilisez. Si le contexte que vous utilisez avec LayoutInflater.fromContext() ou context.getSystemService(...) est en fait une activité, il devrait être équivalent à Activity.getLayoutInflater() . Si c'est l'objet de l'application, vous pourriez avoir des problèmes pour gonfler les vues qui contiennent des fragments, IIRC.

    En fait, je pense que le getLayoutInflater() – Méthode d'activité est une méthode de commodité.

    Rappelez-vous que l' Activity comprend un sous-groupe Context , de sorte que toutes les Méthodes disponibles dans Context sont également disponibles dans la Classe d' Activity .

    En interne, il y aura un appel à LayoutInflater.fromContext() ou context.getSystemService() , de sorte que je m'en tiendrais à context.getSystemService fois pour éviter l'appel de la méthode inutile et pour clarifier que je fais appel à un service système.

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