2013-12-19 7 views
16

Wie verwende ich Fragmente in Fragmenten richtig?Korrekte Verwendung von Unterfragmenten mit (Child) FragmentManager

My (vereinfacht) Anwendungsfall ist folgende, ich habe eine Aktivität mit einem Layout-Fragmente und dieses Fragment theirself enthält ein Unterfragment ... alle Fragmente manuell zu ihren Eltern hinzugefügt ...

---------------------------------------------------------- 
- Activity            - 
-              - 
-              - 
-  ---------------------------------------   - 
-  - Fragment       -   - 
-  -          -   - 
-  - -----------------    -   - 
-  - - SubFragment -    -   - 
-  - -    -    -   - 
-  - -    -    -   - 
-  - -----------------    -   - 
-  ---------------------------------------   - 
-              - 
---------------------------------------------------------- 

jetzt in meiner Tätigkeit des onCreate ich folgendes:

if (savedInstanceState == null) 
{ 
    // I create the fragment 
    mMainFragment = new MainFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_main, mMainFragment); 
    transaction.commit(); 
} 
else 
{ 
    // I retrieve the fragment 
    mMainFragment = (BaseFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_main); 
} 

Und in meinem Fragmente onCreate ich/eröffne mein Subfragment:

Problem

Nach Bildschirmdrehung wird mein Subfragment zweimal hinzugefügt ... Wenn ich die Tätigkeit der Verwendung FragmentManager dann funktioniert es ... Aber warum es nicht mit den ChildFragmentManager arbeiten? Natürlich ist das Fragment ein neues Fragment, aber die Aktivität ist auch eine neue, also warum funktioniert es mit dem FragmentManager der Aktivität, aber nicht mit dem eines Elternteils? In einem Fragment sollte ich die Fragmente ChildFragmentManager verwenden, oder?

+0

nicht die gleiche Frage hinzufügen , aber für andere, die hierher kommen, siehe die [Kommunikation zwischen verschachtelten Fragmenten in Android] (http://stackoverflow.com/questions/39491655/communication-between-nested-fragments-in-andro ID/39563977 # 39563977). – Suragch

Antwort

7

Sie sollten SubFragment zu Fragment auf die gleiche Weise hinzufügen, wie Sie Fragment zu Activity hinzufügen. Ich meine das Hinzufügen Fragment-Activity sollte wie folgt aussehen:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    .... 
    if (savedInstanceState == null){ 
     //add fragment 
     mMainFragment = new MainFragment(); 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.fragment_main, mMainFragment); 
     transaction.commit(); 
    } 
} 

SubFragment zu MainFragment Hinzufügen sollte wie folgt aussehen:

public class MainFragment extends Fragment{ 

     @Override 
     public View onCreateView(LayoutInflater i, ViewGroup c, Bundle savedInstanceState) { 
      ... 
     if (savedInstanceState == null){ 
      mSubFragment = new SubFragment(); 

      //add child fragment 
      getChildFragmentManager() 
        .beginTransaction() 
        .add(R.id.fragment_sub, mSubFragment, "tag") 
        .commit(); 
     } 
     } 
    } 

oder Sie können Kind-Fragment Fragment in onCreate Methode

+0

ich denke, das ist, was das OP in Frage gestellt. – lionelmessi

+0

@lionelmessi nein, er verwendet onCreateVIEW vs onCreate. Ich denke, das ist die richtige Antwort – HaydenKai