¿Cómo obtener un inflador de diseño dado un contexto?


226

Estoy escribiendo una implementación personalizada de un ListAdapter.

En su constructor, estoy tomando un Contexto, un ID de recurso (es decir, R.id.xxx que representa el archivo de diseño) y una lista y un mapa (estos contienen los datos).

Ahora, el problema es que necesitaré un LayoutInflater para obtener el objeto View que está en el archivo XML de diseño separado.

¿Cómo puedo obtener el LayoutInflater dado solo el contexto?

Ahora, por qué creo que esto es posible, es que esto es bastante similar a lo que se pasa al constructor de un ArrayAdapter (contexto, recurso, textViewResourceId, matriz de datos), y creo que el ArrayAdapter también tiene que usar un LayoutInflater dado solo un contexto.

¿Pero cómo se puede hacer?

Respuestas:


515

Puedes usar el static from()método de la LayoutInflaterclase :

 LayoutInflater li = LayoutInflater.from(context);

11
¡Gracias! Estaba tratando de encontrar Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Edwin Lee

Este es el único método que funcionó para mí. Todos los demás que he probado hasta ahora arrojaron una excepción.
num1

44
¿Es costoso obtener el inflador cada vez que se necesita, es decir, cree que deberíamos salvar a un miembro del inflador?
AlikElzin-kilaka

Por cierto, creo que deberíamos usar LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE) ya que finalmente LayoutInflater.from (context) está haciendo lo mismo dentro.
Ankur Chaudhary

3
¿Cuál es el mejor? El que tiene 270 votos o el que tiene más de 25 votos
DJphy

53

También puede usar este código para obtener LayoutInflater:

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

40
¿Cuál es la diferencia entre LayoutInflater.from (Context ctx) y este getSustemService (...)?
Teo Choong Ping

8
+1, para una buena pregunta, en la implementación del método LayoutInflater.from (context) también llame a context.getSystemService () para obtener el proveedor de servicios LayoutInflater del administrador del sistema. Por lo tanto, puede haber una diferencia de basura en la pila de llamadas.
NguyenDat

11
LayoutInflater.from (context) también arroja un error si el inflador no se puede recuperar: aquí el código: LayoutInflater estático público de (Context context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {throw new AssertionError ("LayoutInflater no encontrado"); } return LayoutInflater; }
Hiep
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.