vistas studio layout_inflater_service inflater getlayoutinflater example java android layout-inflater

java - studio - viewgroup



¿Cuál es la forma correcta de obtener inflater de diseño en Android? (4)

Hay una manera de obtener layoutInflater:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

y otra forma es:

LayoutInflater inflater = LayoutInflater.from(context);

un tercero (cuando estoy en una actividad) es:

LayoutInflater inflater = getLayoutInflater();

Entonces, ¿cuál es la diferencia entre ellos?

Tenga en cuenta que cuando envié el tercer inflador a mi adaptador, mi aplicación funcionó. Pero cuando envié el contexto y creé el inflador a través de la segunda forma, ¡no fue así!


En realidad, creo que el método de actividad getLayoutInflater() es un método de conveniencia.

Recuerde que las subclases de Activity Context , por lo que todos los métodos disponibles dentro de Context también están disponibles en la clase de Activity .

Internamente habrá una llamada a LayoutInflater.fromContext() o context.getSystemService() , por lo que me context.getSystemService a context.getSystemService para evitar la llamada innecesaria del método y para aclarar que estoy haciendo una llamada a un servicio del sistema.


La única diferencia es el contexto que usas. Si el contexto que usa con LayoutInflater.fromContext() o context.getSystemService(...) es en realidad una Actividad, debería ser equivalente a Activity.getLayoutInflater() . Si es el objeto de la aplicación, es posible que tenga problemas para inflar vistas que contienen fragmentos, IIRC.



utilizar fuera de su actividad

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

Dentro de tu actividad

LayoutInflater inflater = getLayoutInflater();

Mira esto

Si abres la fuente de Android, puedes ver que el método LayoutInflator.from se ve así:

/** * Obtains the LayoutInflater from the given context. */ public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError("LayoutInflater not found."); } return LayoutInflater; }

y no hay diferencia

Siempre que la Actividad o la Ventana que llama a getLayoutInflater() tenga el mismo Contexto que llamaría a getSystemService() , no hay diferencia.