Ich verwende Fragmente, wenn ich ein Fragment beim ersten Mal instanziiere. aber das zweite mal habe ich diese ausnahme bekommen. Ich konnte die Zeile nicht finden, in der ich den Fehler erhalten habe.
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)
Folgendes mache ich, wenn ich auf ein Element meines Listenfragments klicke.
// 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();
Wenn es zum ersten Mal in Ordnung ist, klicke ich in der Liste auf element2. Es ist auch in Ordnung. Aber wenn ich zu Element1 zurückkehre, habe ich diesen Fehler.
Vielen Dank an alle!
android
android-layout
android-fragments
haythem souissi
quelle
quelle
Antworten:
Wenn Sie
OnCreateView
in IhrerRouteSearchFragment
Klasse überschreiben , haben Sie dieCodesegment?
Wenn ja, sollte das Entfernen der return-Anweisung Ihr Problem lösen.
Sie können den Code beibehalten und die Ansicht zurückgeben, wenn Sie die Ansichtsdaten nicht neu generieren möchten. Mit der onDestroyView () -Methode entfernen Sie diese Ansicht wie folgt aus dem übergeordneten Element:
quelle
return inflater.inflate(R.layout.fragment_search, container);
mitreturn inflater.inflate(R.layout.fragment_search, container, false);
Es tut mir leid, auf eine alte Frage zu posten, aber ich konnte sie mit einer völlig anderen Lösung beheben. Ich habe diese Ausnahme erhalten, aber die erste Zeile meiner onCreatView-Überschreibung wurde geändert:
... dazu:
Ich habe keine Ahnung warum, aber die Verwendung der Überschreibung, die den Booleschen Wert als dritten Parameter akzeptiert, hat ihn behoben. Ich denke, es weist das Fragment und / oder die Aktivität an, den "Container" nicht als übergeordnetes Element der neu erstellten Ansicht zu verwenden.
quelle
Ich habe dieses Problem viele Male konfrontiert. Bitte fügen Sie folgenden Code hinzu, um dieses Problem zu beheben:
Vielen Dank
quelle
Wenn Sie diese Aussage haben ..
Dann versuchen Sie dies. Fügen Sie als drittes Argument false hinzu. Vielleicht könnte es helfen.
quelle
Ich hatte diesen Code in einem Fragment und er stürzte ab, wenn ich versuchte, zu diesem Fragment zurückzukehren
Nachdem ich die Antworten in diesem Thread gesammelt hatte, stellte ich fest, dass die Eltern von mRootView immer noch mRootView als Kind haben. Das war also mein Fix.
hoffe das hilft
quelle
Dies passiert auch, wenn die von onCreateView () zurückgegebene Ansicht nicht die Ansicht ist, die aufgeblasen wurde.
Beispiel:
Fix:
Anstatt:
quelle
Ich hatte dieses Problem und konnte es nicht in Java-Code lösen. Das Problem war mit meiner XML.
Ich habe versucht, einem Container eine Textansicht hinzuzufügen, aber die Textansicht in ein LinearLayout eingeschlossen.
Dies war die ursprüngliche XML-Datei:
Jetzt mit entferntem LinearLayout:
Das schien mir nicht viel zu sein, aber es hat den Trick getan, und ich habe meinen Java-Code überhaupt nicht geändert. Es war alles in der XML.
quelle
Sie fügen ein
View
in ein hinzulayout
, aber die Ansicht befindet sich bereits in einem anderenlayout
. Eine Ansicht kann sich nicht an mehr als einem Ort befinden.quelle
Diese Lösung kann helfen:
quelle
Ich löste es durch das Setzen
attachToRoot
voninflater.inflate()
zufalse
.quelle
In Ihrer XML-Datei sollten Sie layout_width und layout_height von wrap_content auf match_parent setzen. es ist für mich behoben.
quelle