web-dev-qa-db-fra.com

Quelle est la bonne façon d'obtenir layoutinflater dans Android?

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!

30
Hamzeh Soboh

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)

6
user3110424

utiliser en dehors de votre activité

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

Au sein de votre activité

     LayoutInflater inflater = getLayoutInflater();

Vérifiez ceci

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.

18
sachin10

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.

5
MathewI

En fait, je pense que la getLayoutInflater() - méthode d'activité est une méthode pratique.

N'oubliez pas que les sous-classes ActivityContext, 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.

3
Peter