Me pregunto si esto es realmente un error en la API de Android:
Tengo una configuración así:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Es un menú que carga el fragmento n. ° 2 (Una pantalla de búsqueda) en el panel derecho.
- Es una pantalla de búsqueda que contiene el fragmento n. ° 3, que es una lista de resultados.
- La lista de resultados se usa en varios lugares (incluso como un fragmento funcional de alto nivel por derecho propio).
Esta funcionalidad funciona perfectamente en un teléfono (donde 1 y 2 y 3 son ActivityFragment
s).
Sin embargo, cuando usé este código:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Donde R.id.leftPane
y R.id.rightPane
están <fragment>
s en un diseño lineal horizontal.
Tengo entendido que el código anterior elimina el fragmento que es residente y luego lo reemplaza con un nuevo fragmento. Brillante ... Obviamente, eso no es lo que sucede porque cuando este código se ejecuta la segunda vez, obtienes la siguiente excepción:
07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
Esto se debe a que el contenedor para FragmentNumber3 se ha duplicado y ya no tiene una ID única. El Fragmento inicial no ha sido destruido (?) Antes de que se agregue el nuevo (en mi opinión, eso significa que no ha sido reemplazado ).
¿Alguien puede decirme si esto es posible ( esta respuesta sugiere que no lo es) o es un error?