Comment obtenir un gonfleur de mise en page dans un contexte?

226

J'écris une implémentation personnalisée d'un ListAdapter.

Dans son constructeur, je prends un contexte, un ID de ressource (c'est-à-dire R.id.xxx représentant le fichier de mise en page), et une liste et une carte (celles-ci contiennent les données).

Maintenant, le problème est que j'aurai besoin d'un LayoutInflater pour obtenir l'objet View qui se trouve dans le fichier XML de mise en page séparé.

Comment puis-je me procurer le LayoutInflater étant donné uniquement le contexte?

Maintenant, pourquoi je pense que cela est possible, c'est que cela est assez similaire à ce qui est transmis au constructeur d'un ArrayAdapter (contexte, ressource, textViewResourceId, tableau de données), et je pense que l'ArrayAdapter doit également utiliser un LayoutInflater donné uniquement un contexte.

Mais comment faire?

Edwin Lee
la source

Réponses:

515

Vous pouvez utiliser la static from()méthode de la LayoutInflaterclasse :

 LayoutInflater li = LayoutInflater.from(context);
Dave Webb
la source
11
Merci! j'essayais de trouver Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Edwin Lee
C'est la seule méthode qui a fonctionné pour moi. Tous les autres que j'ai essayés jusqu'à présent ont levé une exception.
num1
4
Est-ce cher d'obtenir le gonfleur chaque fois que cela est nécessaire, ce qui signifie, pensez-vous que nous devrions sauver un membre du gonfleur?
AlikElzin-kilaka
BTW je pense que nous devrions utiliser LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE) car finalement LayoutInflater.from (context) fait de même à l'intérieur.
Ankur Chaudhary
3
Quel est le meilleur ?? celui avec 270 votes ou celui avec 25+ votes
DJphy
53

Vous pouvez également utiliser ce code pour obtenir LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
NguyenDat
la source
40
Quelle est la différence entre LayoutInflater.from (Context ctx) et ce getSustemService (...)?
Teo Choong Ping
8
+1, pour une bonne question, dans l'implémentation de la méthode LayoutInflater.from (context), appelez également context.getSystemService () pour obtenir LayoutInflater Service Provider depuis System Manager. Il peut donc y avoir une différence de portée dans la pile des appels.
NguyenDat
11
LayoutInflater.from (context) génère également une erreur si le gonfleur ne peut pas être récupéré: ici le code: public static LayoutInflater de (Context context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {throw new AssertionError ("LayoutInflater not found."); } return LayoutInflater; }
Hiep