我有一个包含两个容器的活动,分别为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();
}