Acceder

Ver la Versión Completa : Inflar un View que está dentro de un Layout


buni
22/11/12, 18:29:28
Buenas, estoy realizando una aplicación para android, y para ahorrarme algo de código he creado un Layout genérico que contiene la cabecera y el pie de la actividad, entre estos, está una View en la cual quiero "inflar" lo correspondiente para clase.
El problema es que cuando lo inflo no se muestra nada.

En el layout..

<!-- CABECERA -->
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0"
android:background="#008080" android:orientation="horizontal">
....
</LinearLayout>

<!-- CONTENEDOR -->
<View android:id="@+id/general_container" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"/>

<!-- PIE -->
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0"
android:background="#008080" android:orientation="horizontal">
....
</LinearLayout>

</LinearLayout>


Y en la activity...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inicio);
View view =(View) findViewById(R.id.general_container);
view = LayoutInflater.from(getApplicationContext()).infla te(R.layout.textview_layout, null);
TextView tv1 = (TextView) view.findViewById(R.id.tv); tv1.setText("HOLA1");
TextView tv2 = (TextView) view.findViewById(R.id.tv2); tv2.setText("HOLA2");

Muchísimas gracias de antemano.

mocelet
22/11/12, 18:55:11
Normal, la vista que has "inflado" no está asociada de ninguna manera al layout de activity_inicio. Así que es como si no existiera.

Para lo que quieres usa los ViewStub, pones uno para la cabecera y otro para el pie en el layout de cada activity. Los stubs se sustituyen luego por el layout que quieras, de modo que tienes la cabecera en un único xml, y el pie en otro único xml.

Más info: http://developer.android.com/reference/android/view/ViewStub.html

manelizzard
22/11/12, 19:22:38
Tienes otra opción si sigues por la línea en la que ibas.

Fijate que obtienes la referencia a general_container, y quieres que sea el padre de la nueva vista a inflar.

Utilizando el mismo método, fíjate que el último parámetro es el root. Si en éste parámetro pones la referencia a general_container, debería hacer lo que pides.

LayoutInflater.from(getApplicationContext()).infla te(R.layout.textview_layout, view);Un saludo

mocelet
22/11/12, 20:33:05
Muy buena la última respuesta ;)

buni
23/11/12, 11:02:00
Actualizado: Bueno, lo he solucionado, dejo aquí puesto como por si a alguien más le ocurre lo mismo:

1) He eliminado la View container y en su lugar en colocado un LinearLayout.
2) He generado una View desde la activity y le he inflado el Layout que quería.
3) He accedido mediando findViewById al Layout Container y le he agregado la View con .addView

Y así me queda todo bien colocado y como quería, muchísimas gracias.

Buenas de nuevo! He logrado solucionar algo, como dijo manelizzard, he añadido el root al inflater, pero este solo me deja agregarlo al LinearLayout principal del xml, y haciendo de este modo me agrega la View, pero no donde le corresponde, si no al final del todo (Pegando así el pie y la cabecera).
He agregado un LinearLayout que "recoge" a la View, pero al seleccionar este como Root, me da un error. Seguiré investigando a ver, muchísimas gracias a ambos.