2014-02-22 25 views
0

我有一個活動,在其中加載我的應用程序的所有細節,方法是在我的活動的框架佈局中加載不同的片段。如何在特定條件下清除android中的fragmentbackStack

在簡單流動的情況下,當我加載A> B> C> D然後回來時D> C> B> A正常工作正常。按下後退時,我總是希望從B移動到A.

但現在在一個例子中,我有不同的seq。其中我加載A> B> C然後從C我有一個按鈕,我需要再次加載B.現在,當用戶按下B後,我需要再次轉到A,而不會轉到C.所以爲了實現這一點,在父活動的onKeyDown事件中,我檢查瞭如果當前片段是我的B片段,那麼只需加載A片段並通過popBackStackImmediate()清除後臺堆棧(因爲我不再需要它)。但是現在當我按下B時,它會加載片段A,但片段B不會被刪除。我也嘗試檢查幾個手動刪除和添加片段的答案,但仍然沒有運氣。如果您對此有任何建議,請向我解釋添加和刪除過程或給我一些參考網站的位置,我可以獲取詳細信息。

我試圖找出後臺堆棧的確切工作,但也沒有運氣。我不明白髮生了什麼(爲什麼片段B未被刪除並被添加到A中)。我過去兩天一直在爲此嘗試。請幫助我。

非常感謝。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // Log.e(LOG_TAG, "Key down = " + keyCode); 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      if (getSupportFragmentManager().findFragmentByTag(
        RefillMainScreen.FRAGMENT_TAG) != null) { 
       RefillMainScreen refillMainScreen = (RefillMainScreen)                               getSupportFragmentManager() 
         .findFragmentByTag(RefillMainScreen.FRAGMENT_TAG); 
       if (refillMainScreen.isVisible()) { 
         MainActivity.displayBackStack(getSupportFragmentManager()); 
        while (getSupportFragmentManager().getBackStackEntryCount() > 1) { 
         getSupportFragmentManager().popBackStackImmediate(); 
        } 
        loadFragment(new DashboardFragment(), false); 

       } else { 
        super.onKeyDown(keyCode, event); 
       } 
      } else { 
       super.onKeyDown(keyCode, event); 
      } 
      return true; 
     } else { 
      return super.onKeyDown(keyCode, event); 
     } 
    } 

回答

1

點擊按鈕,你在C希望 - 一個簡單的彈出後棧

public void onClick(View v){ 
    fragmentManager.popBackStack(); 
} 

這會從後面跳出C堆棧,即把它拿出或刪除,你會去回到B,因爲你從B中加入B來返回堆棧,在B從B回來時,你將按照你想要的方式回到A。 :)

+0

你好阿圖爾,這解決了我的問題。但是,請詳細告訴我,popBackStack究竟做了什麼:它是否會從backStack中移除所有片段,或者只是刪除已加載的片段,然後在backstack中加載第一個片段? –

+0

是的,你的理解是正確的。從片段B移到C時,你做了addToBackStack嗎?所以做popBackStack只會從後面的堆棧中移除你的C,因爲它現在處於頂層。 –

+0

我有另外一個問題。在一個具體的seq。中,我需要從A> C然後點擊C按鈕,我需要去B frag。當現在按B鍵時,A應該被加載。這就是我的impl it >>我加載了frag。 A然後從它加載C加入A到後臺堆棧。現在我加載B按鈕點擊C **沒有**添加C到後臺堆棧。所以,現在我按回B,然後A應該加載,因爲只有A是在backstack.But A與B frag交疊。我不明白原因。如果我手動刪除B然後一切正常,但問題是應該回來按刪除它? –

相關問題