Sustitución dinámica de Fragmentos de Android
Acabo de empezar a jugar con Fragmentos y estoy tratando de añadir dinámicamente / reemplazar fragmentos.
Puedo agregarlos muy bien, como así …
- FontMetrics no es correcto cuando se ejecuta en el dispositivo Android. Simulador bien
- Notificación genera error al utilizar elementos vectoriales
- Java ParseException al intentar la anotación String to Date
- ¿Cómo heredar el atributo de estilo de Android?
- Android Editar texto cubierto por el teclado en el segundo toque
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); FragmentManager fragMan = getSupportFragmentManager(); FragmentTransaction fragTran = fragMan.beginTransaction(); FragOne fOne = new FragOne(); FragTwo fTwo = new FragTwo(); FragThree fThree = new FragThree(); fragTran.add(R.id.frag_cont_one, fOne); fragTran.add(R.id.frag_cont_two, fTwo); fragTran.commit(); }
Pero cuando trato de reemplazar fTwo con fThree la aplicación se bloquea. Heres cómo estoy haciendo el reemplazar
fragTran.replace(R.id.frag_cont_two, fThree); fragTran.addToBackStack(null); fragTran.commit();
¿Algunas ideas?
Gracias
10-08 21:30:44.710: E/Trace(3219): error opening trace file: No such file or directory (2) 10-08 21:30:44.869: D/AndroidRuntime(3219): Shutting down VM 10-08 21:30:44.869: W/dalvikvm(3219): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 10-08 21:30:44.889: E/AndroidRuntime(3219): FATAL EXCEPTION: main 10-08 21:30:44.889: E/AndroidRuntime(3219): java.lang.RuntimeException: Unable to start activity ComponentInfo{evans.louis.fragments/evans.louis.fragments.Home}: java.lang.IllegalStateException: commit already called 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread.access$600(ActivityThread.java:141) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.os.Handler.dispatchMessage(Handler.java:99) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.os.Looper.loop(Looper.java:137) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread.main(ActivityThread.java:5041) 10-08 21:30:44.889: E/AndroidRuntime(3219): at java.lang.reflect.Method.invokeNative(Native Method) 10-08 21:30:44.889: E/AndroidRuntime(3219): at java.lang.reflect.Method.invoke(Method.java:511) 10-08 21:30:44.889: E/AndroidRuntime(3219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 10-08 21:30:44.889: E/AndroidRuntime(3219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 10-08 21:30:44.889: E/AndroidRuntime(3219): at dalvik.system.NativeStart.main(Native Method) 10-08 21:30:44.889: E/AndroidRuntime(3219): Caused by: java.lang.IllegalStateException: commit already called 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:582) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 10-08 21:30:44.889: E/AndroidRuntime(3219): at evans.louis.fragments.Home.onCreate(Home.java:37) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.Activity.performCreate(Activity.java:5104) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 10-08 21:30:44.889: E/AndroidRuntime(3219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 10-08 21:30:44.889: E/AndroidRuntime(3219): ... 11 more
EDIT: LogCat añadido
- PDI para Android: bloqueo al usar autoSizeColumn ()
- Java - Android - Split Activity / Class en varios archivos para una mejor organización (solución)
- Pasar `Contexto` en todas partes parece desordenado - crear clases para manejar diferentes interacciones con el contexto?
- Información externa del hardware
- Quitar elementos de HashMap por clave en java
- ¿Cómo puede obtener la luz azul halo de una tostada en mi tostada personalizado también?
- Cómo comprobar si un hilo de Android está en ejecución
- Cómo cambiar el color de resaltado en el campo editText
El problema está ahí en su salida logcat:
Caused by: java.lang.IllegalStateException: commit already called
Debe comenzar una nueva transacción:
fragTran = fragMan.beginTransaction(); fragTran.replace(R.id.frag_cont_two, fThree); fragTran.addToBackStack(null); fragTran.commit();
He resuelto el problema después de llamar a commit()
y de nuevo reemplazar el fragmento que debe comenzar desde
fragmentTransaction = fragmentManager.beginTransaction(); if(position==0){ fragmentTransaction.replace(android.R.id.content, f1_fragment); else{ fragmentTransaction.replace(android.R.id.content, f2_fragment); } fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();
De lo contrario obtendrá el commit ya llamado error
- Creación de carpeta en la memoria interna
- ¿Cómo habilitar adbd para escuchar un puerto en el arranque en Android?