2016-02-19 62 views
1

我具有由使用addtobackstack功能加入在堆棧中的片段。 當我添加一個片段而沒有使用addtobackstack函數,然後按下返回按鈕,堆棧會返回到錯誤的片段。片段返回堆棧取代問題

例如:

片段A是通過使用addtobackstack

片段B代替通過使用addtobackstack

片段C替換被替換而無需不使用addtobackstack

片段d被替換成使用addtobackstack

當我在破片換貨d,然後按返回鍵,我要到碎片A.但我必須去片段B.

我怎樣才能解決這個問題?

謝謝,

+1

發佈您的代碼。 –

回答

1

把這段代碼放在活動然後嘗試。所以,當你使用片段與addToBackStack()的標籤或傳遞null將在堆棧中添加片段與FragmentManager幫助

片段隨後與活動。

不必addToBackStack()。註釋該代碼或傳遞null

FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); 
    fragmentTransaction .replace(R.id.fragment_container, YouNextFragment); 
    fragmentTransaction .addToBackStack(null); 
    fragmentTransaction .commit(); 

當你按下後退按鈕在活動FragmentManager自動彈出最新添加的片段。

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 

      case android.R.id.home:     
       if (getFragmentManager().getBackStackEntryCount() ==0) { 
        finish(); 
       }else{ 
        getFragmentManager().popBackStack(); 
       } 
       break; 

      default: 
       break; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
+0

你能解釋一下這段代碼如何幫助實現問題中的問題嗎? –

+0

@ankitaggarwal:看到我更新的答案。 – Ajinkya

+0

我認爲這個答案不是關於我問的東西:)但我會嘗試。我不想添加特定的片段到後臺堆棧。但是你說過用「null」參數將所有片段添加到backstack中。 –