Android: setContentView () == getViewInflate (). Inflate ()?

Trato de desarrollar una forma inteligente de limpiar pilas de Blah blah = (Blah) this.findViewById(R.id.blah) que de otro modo contaminan el campo y el método onCreate () de mi pequeña Actividad, y para hacerlo , Siento que no debería usar setContentView () pero getViewInflate (). Inflate () para cada vista definida en XMLs.

¿Es Activity.setContentView() es sorta un azúcar sintáctico y prácticamente está repitiendo getViewInflate().inflate() para cada vista en XML? Leí algo diciendo como si fueran lo mismo.

Si puedo obtener una respuesta mirando el código, por favor díganlo. Revisé Activity.class, pero solo se encontraron comentarios.

3 Solutions collect form web for “Android: setContentView () == getViewInflate (). Inflate ()?”

El setContentView en su actividad en realidad llama a la setContentView en la ventana utilizada por la actividad, que en sí hace mucho más que simplemente inflar el diseño.

Lo que podría hacer es asignar las vistas al campo de clase mediante la reflexión. Puede descargar una clase de utilidad en Github que hace esto.

Analizará todas las vistas declaradas en el diseño, luego tratará de encontrar el nombre correspondiente al ID en su clase R.id. A continuación, intentará encontrar un campo con el mismo nombre en el objeto de destino y establecerlo con la vista correspondiente.

Por ejemplo, si usted tiene un diseño como este

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"> </LinearLayout> 

Automáticamente lo asignará a un campo textView1 en su actividad.

Estoy publicando mis malas investigaciones. En resumen, Activity.setContentView() delega PhoneWindow.setContentView() (la única clase concreta de Window ) en la que se llama LayoutInflater.inflate() , por lo que dice " setContentView() == ViewInflate().inflate() " no es Tan exageradamente, supongo.

 public class Activity extends { private Window mWindow; public void setContentView(int layoutResID) { getWindow().setContentView(layoutResID); initActionBar(); } public Window getWindow() { return mWindow; } } public class PhoneWindow extends Window { private LayoutInflater mLayoutInflater; @Override public void setContentView(int layoutResID) { if (mContentParent == null) { installDecor(); } else { mContentParent.removeAllViews(); } **mLayoutInflater.inflate(layoutResID, mContentParent);** final Callback cb = getCallback(); if (cb != null) { cb.onContentChanged(); } } } 

En realidad tienes razón, hay dos maneras de lograr lo mismo:

1) setContentView(R.layout.layout);

2)

 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.layout, null); setContentView(v); 

Usted decide qué es más apropiado para usted. Espero que esto ayude.

  • InflateException en la llamada al método inflater.inflate ()
  • ¿Cuál es la diferencia entre los infladores
  • ¿Qué debo pasar por la raíz al inflar una presentación para utilizarla en ActionView de MenuItem?
  • Infla la vista sin el margen
  • Cómo guardar un diseño hinchado en android después de los cambios de configuración?
  • ¿Se recomienda comprobar la vista de null con cada llamada findViewById?
  • gancho LayoutInflater y cambiar los valores al inflar las vistas
  • ¿Cuál es la diferencia entre Factory y Factory2 de LayoutInflater?
  • Línea del archivo XML binario ocasional #XX: Error al inflar la clase <unknown>
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.