1

Ich versuche, ein verschachteltes ListFragment in meinem DialogFragment anzuzeigen.Wie programmiere ich dieses Fragment programmatisch zu meinem Fragment?

Offenbar kann ich nicht einfach eine <fragment> im XML für mein DialogFragment-Layout deklarieren, weil fragments-in-fragments den childFragmentManager benötigen. So versuche ich dies in meinem DialogFragment zu tun:

Fragment listfragment = new ClassThatExtendsListFragment(); 
FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.add(????????, listfragment).commit(); 

Ich habe absolut keine Ahnung, welche Ressourcen-ID muss ich in die setzen ???????? Abschnitt oder wie ich es überhaupt zuweisen würde.

+0

http://stackoverflow.com/questions/18296868/how-to-add-a-fragment-to-a-programmatically-generated-layout versuchen Sie es .... –

Antwort

1

einfach FrameLayout in Ihr Layout einfügen. Angenommen, Sie gibt es id als „Container“,

Fragment exampleFragment = new ExampleFragment(); 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.container, exampleFragment).commit(); 
0

Ich bin nicht sicher, welche Art von Layout, das Sie für Ihren DialogFragment verwenden, aber in der Regel in der XML, die DialogFragment Sie benötigen aufbläst eine FrameLayout und wichtiger hinzufügen Gib ihm eine ID. Dann, wenn Sie Ihre Fragment Transaktion übergeben Sie in der Ressource-ID des FrameLayout

XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

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

Wenn Sie verschachtelte Fragmente verwenden möchten Sie benötigen getChildFragmentManager() nennen:

FragmentManager fragmentManager = getChildFragmentManager() 

Dann für Ihre Fragment Transaktion:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).commit(); 

Sie m ight wollen die add Methode anstelle von replace verwenden, aber das ist bis zu Ihnen

Vielleicht möchten Sie auch das vorherige Fragment auf das Backstack hinzufügen, wenn Sie die Freigabe zurück Taste drückt wollen:

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit(); 
+0

Dies ist ein Fragment in einem Fragment, so dass Sie kann den regulären Manager nicht verwenden. Auch dieser Code, nehme ich an, geht in der oncreatedialog Methode meines Dialogfragments? –

+0

Habe das nicht bemerkt. In diesem Fall würden Sie einfach den childfragmentmanager anstelle des regulären Fragmentmanagers verwenden. Was Sie als erstes Argument in die add/replace-Methode eingeben, ist dasselbe (die Ressourcen-ID des framelayout, in der das Unterfragment angezeigt werden soll). – Simon

+0

Wohin Sie diesen Code platzieren, hängt davon ab, wo/wann Sie das ListFragment verwenden möchten Angezeigt werden. Sobald Sie den obigen Code ausführen, wird die Fragmenttransaktion festgeschrieben und die Dinge werden angezeigt. Platzieren Sie es einfach an der richtigen Stelle, wenn das neue Fragment zum Leben erweckt werden soll. – Simon

1

Meine Forderung war auch wie du. unter Code funktionierte für mich.

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    MyTripFragment myTripFragment = new MyTripFragment(); 
    fragmentTransaction.add(R.id.fragment_container, myTripFragment); 
    fragmentTransaction.commit(); 

XML-Code:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


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

Hoffe, dass es für Sie helfen.