¿Cuál es la forma correcta de obtener el inflador de diseño en Android?

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 inflado a mi adaptador, mi aplicación funcionó. Pero cuando envié el contexto y creé el inflador a través de la segunda vía, ¡no!

No hay mucha diferencia entre ellos.

Como doc dice público abstract Object getSystemService (String name)

Un LayoutInflater para inflar recursos de diseño en este contexto.

Y para el LayoutInflater estático público de (Context context)

Obtiene el LayoutInflater desde el contexto dado.

Puede comprobar este hilo ¿Existe alguna diferencia entre getLayoutInflater () y .getSystemService (Context.LAYOUT_INFLATER_SERVICE)

Uso fuera de su actividad

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

Dentro de su actividad

  LayoutInflater inflater = getLayoutInflater(); 

Mira esto

Si abre la fuente de Android, puede 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 y cuando la Actividad o Ventana que llama a getLayoutInflater() tenga el mismo Contexto que llamaría getSystemService() , no hay diferencia.

La única diferencia es el contexto que usas. Si el contexto que utiliza con LayoutInflater.fromContext() o context.getSystemService(...) es realmente una actividad, debe ser equivalente a Activity.getLayoutInflater() . Si es el objeto de aplicación, puede tener problemas para inflar vistas que contienen fragmentos, IIRC.

En realidad creo que el getLayoutInflater() – Método de Actividad es un método de conveniencia.

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

Internamente habrá una llamada a LayoutInflater.fromContext() o context.getSystemService() , así que me quedaría con context.getSystemService tanto para evitar la llamada al método innecesario como para aclarar que estoy haciendo una llamada a un servicio del sistema.

  • TextToSpeech setLanguage no funciona?
  • Uso de AppBarLayout.Behavior.DragCallback para controlar el desplazamiento del diseño de barra de herramientas que se contrae
  • Escritura de datos grabados PCM en un archivo .wav (java android)
  • Android - Transiciones de elementos compartidos con actividad de llamada finish ()
  • Cómo cambiar el nombre de un proyecto en Android Studio
  • Android: ¿Una forma sencilla de hacer una geofence?
  • Tengo una ConnectException que no se está cogiendo por alguna razón
  • Android - FATAL EXCEPTION: main - No se puede iniciar la actividad ComponentInfo
  • ¿Cómo forzar la clase derivada a llamar al método super? (Al igual que Android)
  • Androide. Iniciar aplicación desde Dialer
  • TextView no se desplaza suavemente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.