Come ottenere un gonfiatore layout dato un contesto?


226

Sto scrivendo un'implementazione personalizzata di ListAdapter.

Nel suo costruttore, sto prendendo in un contesto, un ID risorsa (cioè R.id.xxx che rappresenta il file di layout) e un elenco e una mappa (questi contengono i dati).

Ora, il problema è che avrò bisogno di un LayoutInflater per ottenere l'oggetto View che si trova nel file XML del layout separato.

Come posso ottenere il LayoutInflater dato solo il contesto?

Ora, perché penso che ciò sia possibile, è che è abbastanza simile a ciò che viene passato al costruttore di un ArrayAdapter (contesto, risorsa, textViewResourceId, array di dati), e immagino che anche l'ArrayAdapter debba fare uso di un LayoutInflater dato solo un contesto.

Ma come si può fare?

Risposte:


515

È possibile utilizzare il static from()metodo dalla LayoutInflaterclasse :

 LayoutInflater li = LayoutInflater.from(context);

11
Grazie! stavo cercando di trovare Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Edwin Lee,

Questo è l'unico metodo che ha funzionato per me. Ogni altro che ho provato finora ha generato un'eccezione.
num 1

4
È costoso ottenere il gonfiatore ogni volta che è necessario, vale a dire, pensi che dovremmo salvare un membro del gonfiatore?
AlikElzin-Kilaka,

A proposito, penso che dovremmo usare LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE) in quanto LayoutInflater.from (context) sta facendo lo stesso all'interno.
Ankur Chaudhary,

3
Qual è il migliore ?? quello con 270 voti o quello con 25+ voti
DJphy

53

Puoi anche usare questo codice per ottenere LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
Qual è la differenza tra LayoutInflater.from (Context ctx) e questo getSustemService (...)?
Teo Choong Ping

8
+1, per una bella domanda, in attuazione del metodo LayoutInflater.from (contesto) anche chiamare context.getSystemService () per ottenere il Provider di servizi LayoutInflater da System Manager. Quindi potrebbe esserci una differenza di lettiera nello stack di chiamate.
Nguyen del

11
LayoutInflater.from (contesto) genera anche un errore se il gonfiatore non può essere recuperato: qui il codice: LayoutInflater statico pubblico da (contesto Context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {lancia nuovo AssertionError ("LayoutInflater non trovato."); } return LayoutInflater; }
Hiep,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.