2015-11-17 79 views
2

問題,我有四個片段:A,B,C,D。現在我從A移動 - >乙:所以我的代碼將回到按片段的Android

A到B

getActivity().getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.content_frame, new B()) 
    .addToBackStack("A") 
    .commit(); 

現在從B到C所以代碼將是

getActivity().getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.content_frame, new C()) 
    .addToBackStack("B") 
    .commit(); 

現在從C到d。但我不想在後臺包含C,因爲後退我不想要C片段顯示。

getActivity().getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.content_frame, new D()) 
    .commit(); 

現在,當我按下返回鍵,將完美高達A.如果我再次重複同樣的過程現在的工作。現在再次按下From D Fragment,我將直接發送A片段而不是B片段。你能否弄清楚我在上面的代碼中犯的錯誤?

+1

@HareshChhelana這不是問題,問題顯示沒有調用加回棧。問題在於片段交易的工作方式。閱讀此答案http://stackoverflow.com/questions/12529499/problems-with-android-fragment-back-stack – Zach

+0

@ Zach ..其實我沒有得到該鏈接 –

+1

是的它沒有定義一個明確的答案只是給它是如何工作的概述。我有類似的麻煩,基本上不得不定義我自己的backstackchangelistener,它定義了什麼發生在後面的堆棧調用 – Zach

回答

0

這裏是BackStackChangedListener的代碼。

public static void performNoBackStackTransaction(final FragmentManager fragmentManager, String tag, Fragment fragment) { 
    final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1; 

    fragmentManager.beginTransaction() 
      .replace(R.id.content_frame, fragment, tag) 
      .addToBackStack(tag) 
      .commit(); 

    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      int nowCount = fragmentManager.getBackStackEntryCount(); 
      if (newBackStackLength != nowCount) { 
       // we don't really care if going back or forward. we already performed the logic here. 
       fragmentManager.removeOnBackStackChangedListener(this); 

       if (newBackStackLength > nowCount) { // user pressed back 
        fragmentManager.popBackStackImmediate(); 
       } 
      } 
     } 
    }); 
} 
1

您必須爲單個堆棧的addToBackStack提供相同的字符串值。

.replace(R.id.content_frame, new B()) 
.addToBackStack("stack") 

.replace(R.id.content_frame, new C()) 
.addToBackStack("stack") 
+0

其實我沒有得到你.. –