5
nachladen

Below mein Code:Fragment onCreate mehrmals aufgerufen, wenn das Fragment

public class MyListFragmentActivity extends FragmentActivity{ 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    System.out.println("DEBUG : MLFA onCreate"); 
    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragment()) 
      .replace(detailFragmentID, new MyDetailFragment()).commit(); 
     } 
    } 



    @Override 
    protected void onRestart() { 
      FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      Fragment prevFrag = getSupportFragmentManager().findFragmentById(detailFragmentID); 
    if (prevFrag != null) { 
     fragmentTransaction.remove(prevFrag); 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss(); 
    } else { 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss(); 
    } 
} 

MyListFragment

public class MyListFragment extends Fragment{ 

//When we click on each item in list view call detail fragment to relad its layout 
OnItemClickListener onItemClickListener = new OnItemClickListener() { 

/** Getting the fragmenttransaction object, which can be used to add, remove or replace a fragment */ 
     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
     /** Getting the existing detailed fragment object, if it already exists. 
     * The fragment object is retrieved by its tag name 
     * */ 
     Fragment prevFrag = getFragmentManager().findFragmentById(detailFragmentID); 

     /** Remove the existing detailed fragment object if it exists */ 
     if (prevFrag != null) { 
      fragmentTransaction.remove(prevFrag); 
      MyDetailFragment mydetailFragment = new MyDetailFragment(); 
      fragmentTransaction.replace(detailFragmentID, mydetailFragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.show(getFragmentManager().findFragmentById(detailFragmentID)); 
      fragmentTransaction.commit(); 
     } 
} 

MyDetailFragment

public class MyDetailFragment extends Fragment{ 

onCreate() // on create being called multiple times ? why ????????????? 

onCreateView() 

} 

Wenn ich auf meiner Liste klicken Artikel MyDetai lFragment onCreate() wird nur einmal aufgerufen, aber wenn ich das Gerät in Hoch- oder Querformat kippe, wird MyDetailFragment onCreate() mehrmals aufgerufen?

Warum so? Was mache ich hier falsch und wie behebe ich das?

Antwort

0

Jedes Mal, wenn Sie die Ausrichtung ändern, ist es so gut wie das Neustarten der App. Sie müssen die Änderungen entsprechend behandeln, indem Sie die Ressourcen freigeben, sie erneut erwerben, Ihre Arbeit stoppen und sie fortsetzen usw.

Sie machen nichts falsch.

+0

wie in meinem Fall zu lösen? Es ruft nur onCreate Methode von MyDetailFragment – Goofy

+0

Werfen Sie einen Blick auf den Lebenszyklus und nehmen Sie Änderungen nach Ihren Bedürfnissen: http://developer.android.com/reference/android/app/Fragment.html#Lifecycle =) –

+0

Ich mache genau wie sie im Lebenszyklus gezeigt haben? aber warum wird der oncreate immer wieder aufgerufen? – Goofy