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!

29
demandé sur sachin10 2014-01-08 15:45:08

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)

5
répondu Community 2017-05-23 12:32:26

utiliser hors de votre activité

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

dans le cadre de votre activité

     LayoutInflater inflater = getLayoutInflater();

vérifier cette

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.

17
répondu sachin10 2016-11-23 05:20:00

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.

4
répondu MathewI 2014-01-08 12:11:35

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.

2
répondu Peter 2016-11-23 05:21:01