【发布时间】:2016-07-11 07:24:17
【问题描述】:
我无法理解 Fragment 替换的这种行为。在我的应用程序中,我从 FragmentA 移动到 FragmentB,然后是 FragmentC,然后是 FragmentX,从 FragmentX 我移动 FragmentD,我没有将 FragmentX 保留在后台堆栈中,但是当我弹出片段时,FragmentX 也被调用,因为调用了其他片段(用于测试目的我已经在每个片段的 onCreate() 方法中设置了日志)。我已经读过,当一个弹出片段 onCreate() 被调用时。我正在使用下面的代码来替换片段。
public void replaceFragment(BaseFragment fragment,boolean isToAddBackStack){
baseFragment = fragment;
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_controller, fragment, fragment.getName());
if(isToAddBackStack)
fragmentTransaction.addToBackStack(fragment.getName());
else
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
我使用下面的代码来排便片段,因为我不希望用户向后导航,这就是为什么我在 FragmentManager 的列表中没有找到 FragmentX,但 FragmentX 仍然被排便。下面是我的代码用于排出碎片
public void clearBackStack(){
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
}
我的问题是为什么 FragmentX 在弹出片段时被调用,而我没有将其保留在后台堆栈中,是否还有其他弹出片段的方式(当我说弹出时,我的意思是清除回堆栈)。
注意:当我如前所述清除回栈时,我没有将 FragmentX 保留在回栈中 FragmentX 的 onCreate() 被调用,然后我的 UI 被挂起。我无法找到原因。有什么帮助吗?
【问题讨论】: