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.

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.

  • ¿Se recomienda comprobar la vista de null con cada llamada findViewById?
  • Haga clic en TextView dentro del diseño lineal inflado
  • ¿Cuál es la diferencia entre Factory y Factory2 de LayoutInflater?
  • Android.view.InflateException: Línea de archivo XML binario # 7: Error al inflar la clase
  • Inflater en Android Fragmentos
  • ¿Qué debo pasar por la raíz al inflar una presentación para utilizarla en ActionView de MenuItem?
  • InflateException en la llamada al método inflater.inflate ()
  • ¿Cuál es la forma correcta de obtener el inflador de diseño en Android?
  • FindViewById en la clase non-activity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.