2012-02-01 22 views
5

En mi aplicación tengo una actividad y agrego dos fragmentos en tiempo de ejecución. Necesito intercambiar estos dos fragmentos simultáneamente. Fragmento 1 consiste en un botón y quiero que cuando haga clic en ese botón, el fragmento 1 se mueva al lado derecho de la pantalla y otro fragmento al lado izquierdo de la actividad.Intercambia dos fragmentos simultáneamente

En el método onClick del botón i hemos probado algo como esto

@Override 
    public void onClick(View v) { 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     Fragment newFragment = getFragmentManager().findFragmentById(R.id.pageA); 
     ft.remove(newFragment); 
     Fragment newFragmentB = getFragmentManager().findFragmentById(R.id.pageB); 
     ft.remove(newFragmentB); 
     ft.add(R.id.pageB, newFragment); 
     ft.add(R.id.pageA, newFragmentB); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 

pero estoy consiguiendo el error siguiente

java.lang.IllegalStateException: Can't change container ID of fragment PageA{40653da0 #0 id=0x7f060001}: was 2131099649 now 2131099650 

Quiero algo como esto cuando hago clic en el botón en la página A entonces, la posición de la página A y la página B deberían intercambiarse entre sí.

UI of the fragment

Respuesta

0

Tengo un problema similar (IllegalStateException: Can't change container ID of Fragment) ei resuelto mediante el canje de los contenedores en lugar de los fragmentos ... Sin embargo todavía tengo ni idea de si es possibile para intercambiar directamente fragmentos. Como escribí en la publicación mencionada anteriormente, parece funcionar solo en ics.

+0

es decir, lo que también encontré que no funciona en honeycomb. Nunca lo intenté en ICS. entonces podría ser un problema de Android –

+0

Funciona en ICS siempre que elimine y agregue un fragmento en dos transacciones separadas (eche un vistazo al enlace de arriba para ver cómo se hace) – Matthew

0

He publicado una solución a este problema a una pregunta similar. Mi enfoque es volver a crear el fragmento, pero manteniendo el estado guardándolo primero y volviéndolo a aplicar a la nueva instancia.

Ver https://stackoverflow.com/a/14951987/599614.

Cuestiones relacionadas