setsupportactionbar - manual de programacion android pdf
Reemplazar un fragmento programáticamente (2)
Tengo tres fragmentos como se muestra en la figura de abajo. He agregado todos estos tres fragmentos en LinearLayout usando el archivo .xml y cuando mi actividad de inicio se inicia, carga ese diseño .xml usando setContentView.
Tengo algunos controles en fragmento2. Al hacer clic en cualquiera, se carga el fragmento4 mediante programación utilizando FragmentTransaction y el método commit. Estos fragmentos se agregan a la pantalla, pero el problema es que el fragmento agregado prgrammáticamente toma todo el área de la pantalla. ¿Cual puede ser el problema?
Nota: En cualquier elemento, haga clic en f2. Quiero reemplazar solo f2 con el nuevo fragmento f4. Tenga en cuenta que agregué f1, f2, f3 a través del archivo de diseño xml y agregue nuevo fragmento f4 programáticamente.
Mantenga solo FrameLayout como marcadores de posición para el fragmento en el XML. En el OnCreate cargue los fragmentos en el framelayout. Al hacer clic en el fragmento, proporcione la ID de FrameLayout particular para reemplazarla por Fragment4.
Siempre debe agregar, eliminar y reemplazar sus fragmentos mediante programación. Como tal, le sugiero que reemplace sus fragmentos F-1, F-2 y F-3 con contenedores como FrameLayout.
Básicamente, en lugar de tener un elemento <fragment/>
como F-1, se hace un elemento <FrameLayout/>
. A continuación, realiza una transacción de fragmentos en el FragmentActivity''s onCreate:
Fragment1 f1 = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Ahora, suponga que ha hecho esto para F-1, F-2 y F-3. Luego reemplaza f2 por f4 haciendo lo mismo otra vez en su OnClickListener
:
public void onClick(View v) {
Fragment4 f4 = new Fragment4();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}