Il existe un moyen d'obtenir la mise en page:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
et une autre façon est:
LayoutInflater inflater = LayoutInflater.from(context);
un troisième (quand je suis dans une activité) est:
LayoutInflater inflater = getLayoutInflater();
Quelle est donc 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 via la deuxième voie, ce n'est pas le cas!
Il n'y a pas beaucoup de différence entre eux.
Comme le dit le doc Object abstrait public getSystemService (String name)
Un LayoutInflater pour gonfler les ressources de mise en page dans ce contexte.
Et pour le LayoutInflater statique public de (Context context)
Obtient le LayoutInflater du contexte donné.
Vous pouvez vérifier ce fil Y a-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 );
Au sein de votre activité
LayoutInflater inflater = getLayoutInflater();
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 doit être équivalent à Activity.getLayoutInflater()
. S'il s'agit de l'objet d'application, vous pourriez avoir des problèmes pour gonfler les vues contenant des fragments, IIRC.
En fait, je pense que la getLayoutInflater()
- méthode d'activité est une méthode pratique.
N'oubliez pas que les sous-classes Activity
Context
, donc toutes les méthodes disponibles dans Context
sont également disponibles dans la classe Activity
.
En 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 et pour préciser que j'appelle un service système.