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?
- Redimensionamiento suave de un gráfico y una vista de mapa
- La adición dinámica de fragmentos con diseño xml a GridLayout no es workng
- XML Layout - Identificador de entrada 0x11a es más grande que el recuento de entradas 0xb2
- El botón de acción flotante no funciona sobre ListView
- Google Maps v3 MapView no toma todas las vistas de los padres en Android
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.
- Personalizar seeekbar enpoints
- Compruebe si elemento de vista se agrega al diseño o no se programa
- ¿Cómo rotar la línea en Android XML?
- GetContentView en Android
- Lamentablemente appName ha detenido el error
- El texto no ellipsiza
- Cómo evitar que los elementos de ListView se iluminen en negro
- ¿Por qué el margen no funciona?
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 .
- Api de rendimiento de Android nivel 11 y superior
- Opciones y mejores prácticas para publicar la versión gratuita y de pago de la misma aplicación en Android Market