Android – Cambiar el diseño del fragmento en tiempo de ejecución

Me gustaría implementar un diseño Multi-Fragmentos de una sola actividad en mi aplicación. Tengo la intención de tener varias "pantallas" (layouts de Fragmento) que voy a cambiar entre (posiblemente añadir a back-stack) en el código.

A mi entender la disposición de los fragmentos en cada pantalla se fija usando objetos de disposición (por ejemplo FrameLayout), que actúan como marcadores de posición para los fragmentos (que comparten el mismo ID). Dado que diferentes pantallas tienen diferentes arreglos Fragmento (uno podría ser FrameLayout, y otro LinearLayout, etc) me preguntaba: ¿Cómo puedo cambiar entre los diseños de fragmentos en tiempo de ejecución?

Entiendo la adición / sustitución de fragmentos (a través de FragmentManager), pero me gustaría agregar completamente un nuevo diseño que los contiene, dentro de una actividad en vivo. Algo como tener transacciones para "setContentView" …

¿Cómo hago esto? ¡Gracias! Danny.

Es ciertamente posible, lo único que tienes que hacer es generar tus propios IDs. Los ID pueden ser cualquier cosa, pero no deben entrar en conflicto con los ID de aapt (los de R) y no deben ser negativos.

El siguiente ejemplo lo demuestra con un conjunto de identificadores fijos:

 public class MainActivity extends Activity { private final int ID_TABLE = 0xA; private final int ID_ROW1 = 0xB; private final int ID_ROW2 = 0xC; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout ll = (LinearLayout) findViewById(R.id.root); TableLayout tl = new TableLayout(this); tl.setId(ID_TABLE); TableRow tr1 = new TableRow(this); tr1.setId(ID_ROW1); TableRow tr2 = new TableRow(this); tr2.setId(ID_ROW2); tl.addView(tr1); tl.addView(tr2); ll.addView(tl); MyFragment frag1 = new MyFragment(); MyFragment frag2 = new MyFragment(); MyFragment frag3 = new MyFragment(); MyFragment frag4 = new MyFragment(); getFragmentManager().beginTransaction() .add(ID_ROW1, frag1, "cell1_1") .add(ID_ROW1, frag2, "cell1_2") .add(ID_ROW2, frag3, "cell2_1") .add(ID_ROW2, frag4, "cell2_2") .commit(); getFragmentManager().executePendingTransactions(); } } 

Para cambiar a un diseño diferente, puede quitar los fragmentos y agregarlos a otra parte.
Déjame saber como va.

EDIT: para aclarar, Views y ViewGroups no necesitan ser instanciados una vez y luego guardados durante toda la vida de la Actividad. Sólo asegúrese de que los fragmentos se eliminan o se separan antes de eliminar su vista asociada. Además, si crea y quita vistas fuera de onCreate debe asegurarse de que se puede restaurar mediante onSaveInstanceState y repetir el proceso en onCreate. Lea el diagrama aquí y el párrafo sobre los cambios de configuración .

  • Ejecución de aplicación google map en Android Emulator
  • Desarrollar en Android 4.0, será compatible con los dispositivos de 2,3 y todos los comprimidos?
  • Forzar Android Fast Scroll Bar en ListViews para dibujar dentro de relleno
  • Estilo de elemento de menú Arc como en la aplicación tumblr para Android
  • DialogFragment pantalla completa muestra relleno en los lados
  • Android expandablelistview cómo establecer el espacio entre los elementos de los grupos
  • Cambiar el color de la barra de estado en el cambio de fragmentos
  • ¿Cómo puedo cambiar colores en mi StateListDrawable?
  • ¿Cómo puedo aumentar el área táctil para los controles (ToggleButton)?
  • ¿Por qué de repente tengo el error "No se puede resolver el objetivo 'android-9'"?
  • Android ejecuta una tarea periódicamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.