2012-02-01 15 views
5

W mojej aplikacji mam jedną aktywność i dodaję dwa fragmenty w czasie wykonywania. Muszę zamienić te dwa fragmenty jednocześnie. Fragment 1 składa się z przycisku i chcę, gdy kliknę ten fragment przycisku 1 przesunie się na prawą stronę ekranu, a drugi fragment po lewej stronie działania.Zamień jednocześnie dwa fragmenty.

W metodzie onClick przycisku Próbowałem coś jak ten

@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(); 
    } 

ale otrzymuję następujący błąd

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

chcę coś takiego po kliknięciu przycisku na stronie A Następnie pozycja strony A i strony B powinna się wzajemnie zamieniać.

UI of the fragment

Odpowiedz

0

mam podobny problem (IllegalStateException: Can't change container ID of Fragment) i ja rozwiązany poprzez zamianę pojemników zamiast fragmentów ... Niemniej jednak wciąż nie mam pojęcia, czy to possibile zamienić bezpośrednio fragmenty. Jak napisałem we wspomnianym wpisie, wydaje się, że działa tylko na ics!

+0

tj. Co również stwierdziłem, że nie działa na plaster miodu. Nigdy nie próbowałem tego na ICS. może to być problem z Androidem –

+0

Działa na ICS, dopóki usuwasz i dodajesz frag w dwóch osobnych transakcjach (spójrz na powyższy link, aby zobaczyć, jak to działa) – Matthew

0

Złożyłem rozwiązanie tego problemu na podobne pytanie. Moje podejście polega na ponownym utworzeniu fragmentu, ale zachowaniu stanu przez zapisanie go najpierw i ponowne zastosowanie go do nowej instancji.

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