2016-04-19 29 views
0

Ich versuche Fragment zu einem anderen Fragment hinzufügen, aber ich erhalte die folgende Ausnahme:Hinzufügen Fragment zu einem anderen Fragment

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.domain.app/com.domain.ui.MainActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f0d00a1 (com.domain.app:id/container) for fragment FrontFragment{259d9bC#0 id=0x7f0d00a1} 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f0d00a1 (com.domain.app:id/container) for fragment FrontFragment{259d9bC#0 id=0x7f0d00a1} 

Die Aktivität Layout:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/fragment" 
    android:name=".MainFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:layout="@layout/main_fragment" /> 

Das Fragment Layout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Wie ich versuche, das untergeordnete Fragment aus dem MainFragment hinzuzufügen:

Soweit ich das beurteilen kann, existiert die ID die ich dem FragmentManager zur Verfügung stelle und sollte da sein. Irgendwelche Hinweise darauf, was ich falsch machen könnte?

+0

die ID des Layout-Aktivität das erste Fragment in add (R.id.container, neuer PassbookViewerFrontFragment()) –

+0

Aber ich muß es hinzugefügt werden, um das Fragment enthält, wie es passiert, wenn ich meine ganze Logik will. Diese Aktivität ist nur ein Dummy. – HelderMPinhal

Antwort

0

Das Problem war, dass ich in der Aktivität Layout ein <fragment id="@+id/fragment"> mit einem id erklärt hatte bereits und dies ID fand statt der container ID, die ich auf dem Fragment-Layout hatte. Kurze Geschichte kurz: entweder keine ID auf der <fragment> oder ein Wrapper-Layout im Fragment.

Auch funktioniert die FragmentTransaction innerhalb der onCreateView funktioniert.

0

Sie haben die Layout-Ressource aufgebläht, aber die Ansicht wird nicht im Moment erstellt, wenn Sie versuchen, verschachtelte Fragmente hinzuzufügen. Ersetzen Sie diesen Code:

getChildFragmentManager() 
     .beginTransaction() 
     .add(R.id.container, new PassbookViewerFrontFragment()) 
     .commit(); 

an eine andere Methode, die nach onCreateView

+0

Ich habe einen Button zum Hauptfragment hinzugefügt und die Transaktion in den Klick-Listener dieser Schaltfläche platziert. Natürlich erzeugt es keinen Fehler beim Aufblasen der Hauptaktivität, aber wenn ich auf die Schaltfläche klicke, bekomme ich immer noch die zweite Ausnahme, die besagt, dass keine Ansicht für den ID-Container gefunden wurde. – HelderMPinhal

0

Ihre FrameLayoutMUST für diese in Ihrem activity layout sein, um genannt zu arbeiten. Dies liegt daran, dass die FrameLayout, in der Sie Ihr Kindfragment platzieren möchten, aufgebläht werden muss, bevor sie ausgefüllt werden kann. Durch Einfügen in Ihr main_fragment.xml Layout, wenn Sie inflater.inflate(R.layout.main_fragment) aufrufen, wird auch das Rahmenlayout aufgebläht, das dann bereit ist, mit dem Kindfragment gefüllt zu werden.

Auf den Punkt gebracht, Ihr Layout XML-Datei Kind Fragment löschen, diese dann in Ihrem main_fragment Layout setzen:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/fragment" 
    android:name=".MainFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:layout="@layout/main_fragment"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</fragment> 
Verwandte Themen