2013-05-29 152 views
1

首先,我使用方法replace添加片段到背堆棧,然後我發現當我按回密鑰時,堆棧中的片段將再次調用onCreateView,我也發現這個在api演示中表現很活躍,所以我認爲這不是一個bug,但是我希望達到這樣的效果,就像我在 按下後退鍵時上一個活動不會調用onCreate方法一樣。添加一個片段之前的片段仍然可見

後來我發現fragmentManager.add()可以實現我的想法,但是出現另一個probrolem,當添加第二個片段時,前面的片段仍然可見。

任何人都可以幫助我嗎?

FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction2 = manager.beginTransaction(); 
     transaction2.add(R.id.fl, f2); 
     transaction2.addToBackStack("Fragment2"); 
     transaction2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     transaction2.commit(); 
+0

這對我有效。 http://stackoverflow.com/questions/14810348/android-fragment-replace-doesnt-replace-content-puts-it-on-top –

回答

0

回到使用替換,只是添加檢查,看看束是否爲空。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    ... 
    if (savedInstanceState == null) { 
     // do work 
     // If the view is being recreated this code won't run 
    } 
    ... 
} 
2

嘗試使用「替代」而不是‘如果你已經爲你的片段的ARGB背景添加’代碼

fragmenttransaction.replace(R.id.realtabcontent, Fragment); fragmenttransaction.commit();

0

檢查的

一部分。在這種情況下,用rgb替換背景,a表示透明。

0

嘗試使用

manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

之前添加新FragmentTransactionhere

0

如果你所添加的第一次你可以在你的代碼添加片段喜歡的片段。

Fragment_Home fragment = new Fragment_Home(); 
     FragmentTransaction fts = (MainActivity.this).getSupportFragmentManager().beginTransaction(); 
     fts.add(R.id.frame_container, fragment); 
//  fts.addToBackStack(fragment.getClass().getSimpleName()); 
     fts.commit(); 

如果你想從這個移動到其他片段,那麼你應該用新的片段替換當前片段。

Fragment_CreateGroup fragment = new Fragment_CreateGroup(); 
      fts = (MainActivity.this).getSupportFragmentManager().beginTransaction(); 
//   fts.addToBackStack(fragment.getClass().getSimpleName()); 
      fts.replace(R.id.frame_container, fragment); 
      fts.commit(); 

這裏ftsFragmentTransaction對象上頂部限定。

+0

如果我們再次添加片段會發生什麼?前一個是否仍然有效?如果在殺死新的片段後,我們可以返回到我們離開片段的前一個片段? –