我有一個活動,在其中加載我的應用程序的所有細節,方法是在我的活動的框架佈局中加載不同的片段。如何在特定條件下清除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);
}
}
你好阿圖爾,這解決了我的問題。但是,請詳細告訴我,popBackStack究竟做了什麼:它是否會從backStack中移除所有片段,或者只是刪除已加載的片段,然後在backstack中加載第一個片段? –
是的,你的理解是正確的。從片段B移到C時,你做了addToBackStack嗎?所以做popBackStack只會從後面的堆棧中移除你的C,因爲它現在處於頂層。 –
我有另外一個問題。在一個具體的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然後一切正常,但問題是應該回來按刪除它? –