Quelle est la bonne façon d'obtenir layout inflater dans Android?
Il y a un moyen d'obtenir layoutInflater:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
et l'autre:
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 gonfleur à mon adaptateur, mon application a fonctionné. Mais quand j'ai envoyé le contexte et créé le gonfleur par la deuxième voie, il ne l'a pas fait!
4 réponses
Il n'y a pas beaucoup de différence entre eux.
, Comme le doc a dit public Objet abstrait getSystemService (String name)
Un LayoutInflater pour gonfler disposition de ressources dans ce contexte.
et pour le public static LayoutInflater from (Context context)
obtient le LayoutInflater de le contexte donné.
vous pouvez vérifier ce fil y a-t-il une différence entre getLayoutInflater() et .getSystemService (Context.LAYOUT_INFLATER_SERVICE)
utiliser hors de votre activité
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
dans le cadre de votre activité
LayoutInflater inflater = getLayoutInflater();
si vous ouvrez la source Android, vous pouvez voir que le LayoutInflator.de la méthode ressemble ainsi:
/**
* 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
aussi longtemps que L'activité ou la fenêtre qui appelle getLayoutInflater()
a le même contexte que appellerait getSystemService()
, il n'y a aucune 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 de gonflage des vues qui contiennent des fragments, IIRC.
en fait, je pense que le getLayoutInflater()
- méthode d'activité est une convenance - méthode.
se rappeler que Activity
sous-classes Context
, de sorte que toutes les méthodes disponibles dans Context
sont également disponibles dans la classe Activity
.
à L'interne il y aura un appel à LayoutInflater.fromContext()
ou context.getSystemService()
, donc je m'en tiendrai à context.getSystemService
à la fois pour éviter l'appel de méthode inutile ainsi pour clarifier que je fais un appel à un système de service.