studio - Android: inicia un intento en un framelayout
pasar de una actividad a otra android con un boton (1)
Si tiene actividades separadas para cada página que desea mostrar, tendrá que ampliar ActivityGroup para la actividad del contenedor (la que muestra las pestañas) y LocalActivityManager para administrar las diferentes actividades incorporadas que desea usar.
Es algo complicado y no documentado. Tuve que leer el código fuente de TabHost .
Buscar la class IntentContentStrategy
.
Básicamente, la idea es que tenga una vista de contenedor y use LocalActivityManager para cargar la actividad, obtener su Vista y colocarla dentro de la vista de contenedor.
Extracto de TabHost.java:
public View getContentView() {
if (mLocalActivityManager == null) {
throw new IllegalStateException("Did you forget to call ''public void setup(LocalActivityManager activityGroup)''?");
}
final Window w = mLocalActivityManager.startActivity(
mTag, mIntent);
final View wd = w != null ? w.getDecorView() : null;
if (mLaunchedView != wd && mLaunchedView != null) {
if (mLaunchedView.getParent() != null) {
mTabContent.removeView(mLaunchedView);
}
}
mLaunchedView = wd;
// XXX Set FOCUS_AFTER_DESCENDANTS on embedded activities for now so they can get
// focus if none of their children have it. They need focus to be able to
// display menu items.
//
// Replace this with something better when Bug 628886 is fixed...
//
if (mLaunchedView != null) {
mLaunchedView.setVisibility(View.VISIBLE);
mLaunchedView.setFocusableInTouchMode(true);
((ViewGroup) mLaunchedView).setDescendantFocusability(
FOCUS_AFTER_DESCENDANTS);
}
return mLaunchedView;
}
Nota: hay muchos ajustes y cosas extrañas que tiene que hacer para que esto funcione (observe el error al que hacen referencia en el comentario), que es probablemente la razón por la que no está documentado.
Tengo una actividad principal con este archivo de diseño:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
android:id="@+id/container"
>
<LinearLayout
android:layout_height="wrap_content"
android:id="@+id/header"
android:background="@drawable/logo_bk"
android:layout_width="fill_parent"
>
<Button
android:id="@+id/btn_reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reload"
/>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
>
<ImageView
android:id="@+id/ImageView01"
android:src="@drawable/logo_head"
android:scaleType="fitStart"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/center"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1">
</FrameLayout>
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:gravity="center"
android:id="@+id/footer"
android:layout_weight="2.6"
android:background="#ffffff">
</LinearLayout>
</LinearLayout>
Básicamente se compone de un encabezado, una parte central (android: id = "@ + id / center") y un pie de página. El pie de página contiene cuatro botones creados dinámicamente. Al final parece un TabWidget con las pestañas en la parte inferior.
Los botones de cada pie de página tienen una intención / actividad.
La pregunta es: ¿cómo puedo comenzar mi actividad en FrameLayout? Por ejemplo, TabHost hace esto:
spec = tabHost
.newTabSpec(tabTitle.toLowerCase())
.setIndicator(tabTitle,res.getDrawable(R.drawable.tab_spec))
.setContent(intent);
tabHost.addTab(spec);