相关疑难解决方法(0)

这是在离开深层嵌套堆栈时清理Fragment堆栈的正确方法吗?

我正在使用Android兼容性库来实现片段并扩展了布局示例,以便片段包含一个触发另一个片段的按钮.

在左侧的选择窗格中,我有5个可选项 - A B C D E.

每个都FragmentTransaction:replace在详细信息窗格中加载一个片段(via ) -a b c d e

现在我扩展了片段e以包含一个按钮,该按钮e1还会在详细信息窗格中加载另一个片段.我在片段e的onClick方法上做了这个,如下所示:

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

如果我做出以下选择:

E - e - e1 - D - E
Run Code Online (Sandbox Code Playgroud)

然后片段e在详细信息窗格中.这很好,我想要的.但是,如果我back在此时按下按钮它什么都不做.我必须点击两次,因为e1它仍然在堆栈上.点击后我在onCreateView中得到一个空指针异常:

为了"解决"这个问题,无论何时A B C D E选择,我都添加了以下内容:

FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
    fm.popBackStack();
}
Run Code Online (Sandbox Code Playgroud)

只是想知道这是否是正确的解决方案或我是否应该做一些不同的事情?

android android-fragments fragment-backstack

127
推荐指数
4
解决办法
13万
查看次数