我有一個包含兩個容器的活動,分別爲fragment,container_left和container_right。多幀,加載多個片段,不能控制後臺堆棧
在導航開始時,列表片段位於container_left中,加載到container_right的片段是一個包含多個按鈕的屏幕。
當某人在container_right的片段中選擇一個按鈕時,該片段將替換container_left中的一個片段,並將新片段加載到container_right中。此時,我已將這筆交易保存到了後臺。如果此時按下後退按鈕,原始列表將加載到container_left中,並將按鈕片段加載到container_right中。但是如果這個人選擇了另一個按鈕(現在在左邊框中),它會向右邊的容器添加一個不同的片段。我不想將新事務添加到backstack,因爲我不想保存只有fragment_container_right更改的事務。我想要後退按鈕只能改變片段的位置。
問題是,在後臺堆棧中的事務正在尋找在右側框架中刪除的原始片段,並且由於該變化,它不會刪除新的片段,因此按鈕片段顯示爲ON container_right中的新片段。
我一直在搞這一段時間,但我無法弄清楚這一點。
我該如何設置它,以便當它彈出堆棧時,即使它們不是當提交事務時那裏存在的碎片,當前在container_right中的任何碎片都會被刪除?
這裏是我到目前爲止加載幀的樣本。正如你所看到的,我在提交之前檢查控制按鈕是否在左邊框架中,所以它不會在每次按下按鈕時加載一個新實例,而且我對每個加載到container_right的片段都做同樣的事情,如果有人點擊已加載片段的按鈕,則不會創建新片段。剩下的唯一問題就是後援交易。
if (!(controlsInLeftFrame)) {
getFragmentManager().beginTransaction().
replace(R.id.fragment_container_right, fragAD).
replace(R.id.fragment_container_left, fragRECB).addToBackStack(null).commit();
} else if (!(getFragmentManager().findFragmentById(R.id.fragment_container_right) instanceof FragAttributeDescription)){
getFragmentManager().beginTransaction().
replace(R.id.fragment_container_right, fragAD).commit();
}
}
if (message.equals("Movement")) {
FragRaceEditorMovement fragRM = new FragRaceEditorMovement();
fragRM.setArguments(bundle);
if (!(controlsInLeftFrame)) {
getFragmentManager().beginTransaction().
replace(R.id.fragment_container_right, fragRM).
replace(R.id.fragment_container_left, fragRECB).addToBackStack(null).commit();
} else if (!(getFragmentManager().findFragmentById(R.id.fragment_container_right) instanceof FragRaceEditorMovement)){
getFragmentManager().beginTransaction().
replace(R.id.fragment_container_right, fragRM).commit();
}