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

2 minutos de lectura

avatar de usuario
Edwin Lee

Estoy escribiendo una implementación personalizada de 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 se encuentra en el archivo XML de diseño separado.

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

Ahora, la razón por la que creo que esto es posible es que 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?

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

 LayoutInflater li = LayoutInflater.from(context);

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

    –Edwin Lee

    6 de febrero de 2010 a las 5:59

  • ¿Es costoso obtener el inflador cada vez que se necesita, es decir, crees que deberíamos salvar a un miembro del inflador?

    – AlikElzin-kilaka

    2 oct 2014 a las 18:47

  • Por cierto, creo que deberíamos usar LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ya que, en última instancia, LayoutInflater.from(context) está haciendo lo mismo por dentro.

    –Ankur Chaudhary

    29 de mayo de 2015 a las 5:21


  • Cual es mejor el que tiene 270 votos o el que tiene 25+ votos

    – DJphy

    17 de junio de 2015 a las 12:36

  • El mejor método a utilizar es este LayoutInflater.from(context). En realidad, hace lo mismo que la respuesta debajo de context.getSystemService, pero dado que Android puede cambiar los métodos subyacentes, deberíamos usar el método principal en su lugar.

    – caja

    4 mayo 2017 a las 10:10

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

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

  • ¿Cuál es la diferencia entre LayoutInflater.from(Context ctx) y este getSustemService(…) ?

    – Teo Choong Ping

    20 de marzo de 2012 a las 10:40

  • +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. Entonces puede haber una diferencia de camada en la pila de llamadas.

    – NguyenDat

    20 de marzo de 2012 a las 10:53


  • LayoutInflater.from(context) también arroja un error si no se puede recuperar el inflador: aquí el código: public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError(“LayoutInflater no encontrado.”); } devuelve LayoutInflater; }

    – Hiep

    17 de agosto de 2012 a las 22:17

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad