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