最佳答案
我使用 Android 兼容性库来实现片段,并扩展了布局示例,以便片段包含一个按钮,该按钮会触发另一个片段。
在左边的选择面板中,我有5个可选项目 -A B C D E
。
每个都在详细信息窗格 -a b c d e
中加载一个片段(通过 FragmentTransaction:replace
)
现在我已经扩展了片段 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();
如果我作出以下选择:
E - e - e1 - D - E
然后片段 e
在详细信息窗格中。这很好,我想要的。然而,如果我按下 back
按钮在这一点上它什么也不做。我必须点击它两次,因为 e1
仍然在堆栈上。此外,在点击之后,我在 onCreateView 中得到了一个 null 指针异常:
为了“解决”这个问题,我在选择 A B C D E
时添加了以下内容:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
只是想知道这是否是正确的解决方案,或者我是否应该做一些不同的事情?