Używam fragmentów, kiedy tworzę instancję fragmentu po raz pierwszy. ale za drugim razem dostałem ten wyjątek. Nie mogłem znaleźć linii, w której pojawił się błąd?
04-04 08:51:54.320: E/AndroidRuntime(29713): FATAL EXCEPTION: main
04-04 08:51:54.320: E/AndroidRuntime(29713): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addViewInner(ViewGroup.java:3013)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2902)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2859)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2839)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.NoSaveStateFrameLayout.wrap(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.BackStackRecord.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.handleCallback(Handler.java:587)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.dispatchMessage(Handler.java:92)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Looper.loop(Looper.java:132)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.app.ActivityThread.main(ActivityThread.java:4126)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invokeNative(Native Method)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invoke(Method.java:491)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
04-04 08:51:54.320: E/AndroidRuntime(29713): at dalvik.system.NativeStart.main(Native Method)
Oto, co robię, gdy klikam element mojej listy.
// If we are not currently showing a fragment for the new
// position, we need to create and install a new one.
RouteSearchFragment df = RouteSearchFragment.newInstance(index);
// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.details_full, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
Za pierwszym razem OK, klikam element2 z listy, też jest ok; ale kiedy wracam do elementu 1, mam ten błąd.
Dziękuję wszystkim!
android
android-layout
android-fragments
haythem souissi
źródło
źródło
Odpowiedzi:
Kiedy nadpisujesz
OnCreateView
w swojejRouteSearchFragment
klasie, czy maszsegment kodu?
Jeśli tak, usunięcie instrukcji return powinno rozwiązać problem.
Możesz zachować kod i zwrócić widok, jeśli nie chcesz ponownie generować danych widoku, a metoda onDestroyView () usuniesz ten widok z jego rodzica w następujący sposób:
źródło
return inflater.inflate(R.layout.fragment_search, container);
zreturn inflater.inflate(R.layout.fragment_search, container, false);
Przepraszam, że piszę na stare pytanie, ale udało mi się to naprawić za pomocą zupełnie innego rozwiązania. Otrzymałem ten wyjątek, ale zmieniłem pierwszą linię mojego zastąpienia onCreatView z tego:
...do tego:
Nie mam pojęcia, dlaczego, ale użycie zastąpienia, które akceptuje wartość logiczną jako trzeci parametr, naprawiło to. Myślę, że mówi fragmentowi i / lub działaniu, aby nie używał „kontenera” jako elementu nadrzędnego nowo utworzonego widoku.
źródło
Wielokrotnie stykałem się z tym problemem. Dodaj następujący kod, aby rozwiązać ten problem:
Dzięki
źródło
Jeśli masz to oświadczenie ...
Spróbuj tego… Dodaj fałsz jako trzeci argument… Może to pomoże…
źródło
Miałem ten kod we fragmencie i zawieszał się, gdy próbowałem wrócić do tego fragmentu
po zebraniu odpowiedzi w tym wątku zdałem sobie sprawę, że rodzic mRootView nadal ma mRootView jako dziecko. Więc to była moja poprawka.
mam nadzieję że to pomoże
źródło
Dzieje się tak również, gdy widok zwrócony przez onCreateView () nie jest widokiem, który został zawyżony.
Przykład:
Naprawić:
Zamiast:
źródło
Miałem ten problem i nie mogłem go rozwiązać w kodzie Java. Problem był z moim xml.
Próbowałem dodać textView do kontenera, ale opakowałem textView wewnątrz LinearLayout.
To był oryginalny plik xml:
Teraz z usuniętym LinearLayout:
Nie wydawało mi się to dużo, ale załatwiło sprawę i w ogóle nie zmieniłem kodu Java. Wszystko znajdowało się w pliku xml.
źródło
Dodajesz
View
do alayout
, ale widok jest już w innymlayout
. Widok nie może znajdować się w więcej niż jednym miejscu.źródło
To rozwiązanie może pomóc:
źródło
Rozwiązałem go przez ustawienie
attachToRoot
odinflater.inflate()
celufalse
.źródło
w pliku xml powinieneś ustawić layout_width i layout_height z wrap_content na match_parent. to jest dla mnie naprawione.
źródło