2010-02-06 19 views
183

Estoy escribiendo una implementación personalizada de un ListAdapter.¿Cómo obtener un inflador de diseño dado un contexto?

En su constructor, estoy tomando un contexto, una identificación 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 me imagino que el ArrayAdapter también tiene que hacer uso de un LayoutInflater dado solo un Contexto.

Pero, ¿cómo se puede hacer?

Respuesta

450

Puede utilizar el staticfrom() method from the LayoutInflater class:

LayoutInflater li = LayoutInflater.from(context); 
+10

Gracias! estaba tratando de encontrar Context.getSomething(). getAnotherThing(). getLayoutInflater()! –

+0

Este es el único método que funcionó para mí. Todos los otros que he probado hasta ahora lanzaron una excepción. – num1

+0

La mejor solución, contento de ser el vigésimo vigésimo voto :) – tbraun

48

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

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

¿Cuál es la diferencia entre LayoutInflater.from (Context ctx) y this getSustemService (...)? –

+8

+1, para una buena pregunta, en el implemento del método LayoutInflater.from (context) también llame a context.getSystemService() para obtener el proveedor de servicios LayoutInflater del administrador del sistema. Entonces puede tener una diferencia de basura en la pila de llamadas. – NguyenDat

+9

LayoutInflater.from (contexto) también tirar de error si el inflado no puede ser retreived: aquí el código: public static LayoutInflater de (contexto Contexto) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError ("LayoutInflater not found."); } return LayoutInflater; } – Hiep

Cuestiones relacionadas