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.
No hay mucha diferencia entre ellos.
Como dice el doc. Public abstract Object getSystemService (nombre de cadena)
Un LayoutInflater para inflar los recursos de diseño en este contexto.
Y para el LayoutInflater estático público de (contexto de contexto)
Obtiene el LayoutInflater del contexto dado.
Puede consultar este hilo. ¿Hay alguna diferencia entre getLayoutInflater () y .getSystemService (Context.LAYOUT_INFLATER_SERVICE)?
utilizar fuera de su actividad
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
Dentro de tu actividad
LayoutInflater inflater = getLayoutInflater();
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.