2015-02-10 211 views
0

我正在研究一個應用程序,其中有一個側面菜單。當每個項目被點擊時,片段被替換爲新的。通過清除已有的片段替換Android中的片段

我有一個這種替代片段的方法,但片段重疊而不是替換。舊片段位於背景中,新片段位於舊片段的頂部。

這是我的替換片段的方法。

private void changeFragment(Fragment targetFragment){ 

    resideMenu.clearIgnoredViewList(); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.main_fragment, targetFragment, "fragment") 
      .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
      .commit(); 

} 

如何在放置新的碎片之前清除舊的碎片?

編輯:

private void changeFragment(Fragment targetFragment){ 

    resideMenu.clearIgnoredViewList(); 
    FragmentTransaction ft = (FragmentTransaction) getSupportFragmentManager().beginTransaction(); 
    Fragment prev = (Fragment) getSupportFragmentManager().findFragmentByTag("fragment"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 
    ft.addToBackStack(null); 
    ft.commit(); 

    getSupportFragmentManager() 
      .beginTransaction() 

      .replace(R.id.main_fragment, targetFragment, "fragment") 
      .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
      .addToBackStack(null) 
      .commit(); 



} 
+0

添加此這是因爲,片段背景是透明的,因此它會告訴你如一個重疊的片段。因此,避免這種情況,您需要爲xml文件中的特定片段設置背景顏色或背景圖像。 – Piyush 2015-02-10 06:02:04

+0

它不是關於背景顏色。我有一個webview,它有一些youtube視頻,即使我改變片段也會播放。它在後臺播放,違反YouTube的政策。我需要以某種方式清除它。 – CuckooMarianne 2015-02-10 06:22:25

+0

您的代碼現在刪除該片段,然後嘗試替換片段。我認爲第二個操作應該是.new不是.replace。 – 2015-02-10 07:38:27

回答

0

嘗試使用此代碼。只刪除以前的片段..:D

 @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

      if(fragment instanceof MessageInbox){ 

       PRODUCT_FLAG=0; 
      } 
      ft.remove(fragment); 
     } 
0

我總是給一個片段一個標籤,當它被創建。事後找到它容易得多。然後你可以使用這樣的代碼:

// DialogFragment.show() will take care of adding the fragment 
// in a transaction. We also want to remove any currently showing 
// dialog, so make our own transaction and take care of that here. 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    Fragment prev = getFragmentManager().findFragmentByTag("dialog"); 
      if (prev != null) { 
       ft.remove(prev); 
      } 
      ft.addToBackStack(null); 
      ft.commit(); 

     // Create and show the dialog. 
DialogFragment newFragment = new GrowLogDialogFragment(); 
newFragment.setTargetFragment(this, 1); 
newFragment.show(getFragmentManager().beginTransaction(), "dialog"); 
+0

請參閱編輯question.I改變我的方法that.Still不工作:( – CuckooMarianne 2015-02-10 06:19:38

0
FragmentTransaction ft = getFragmentManager() 
            .beginTransaction(); 
ft.replace(R.id.main_fragment, targetFragment, "fragment"); 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
ft.addToBackStack(null);// this line do that 
ft.commit(); 
+0

這不工作:( – CuckooMarianne 2015-02-10 06:15:55

0

onpauseondetach

@Override 
public void onPause() { 
    // TODO Auto-generated method stub 
    try{ 

     if (fragment != null) { 
       FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); 
       ft.remove(fragment); 
       ft.commit(); 
     } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     Thread.interrupted(); 
    super.onPause(); 
} 

}