我有一个叫做片段F1的活动A.现在,这个Fragment使用下面的代码调用另一个Fragment F2:
Fragment fragment = new F2Fragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.frame_container, fragment);
ft.addToBackStack("fragment");
ft.commit();
然后Fragement F2使用类似的代码调用另一个Fragment F3:
Fragment fragment = new F3Fragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.frame_container, fragment);
ft.addToBackStack("fragment");
ft.commit();
片段F3有3个子片段(3个标签),它们是使用tabhost添加的,如下所示:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.main_tab, container,
false);
mTabHost = (FragmentTabHost) rootView
.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(),
R.layout.main_tab);
Bundle arg1 = new Bundle();
arg1.putInt("CF1", 1);
mTabHost.addTab(
mTabHost.newTabSpec("Tab1").setIndicator("CF1",
getResources().getDrawable(R.drawable.tab_left)),
CF1Fragment, arg1);
Bundle arg2 = new Bundle();
arg2.putInt("CF2", 2);
mTabHost.addTab(
mTabHost.newTabSpec("Tab2").setIndicator("CF2",
getResources().getDrawable(R.drawable.tab_middle)),
CF2Fragment.class, arg2);
Bundle arg3 = new Bundle();
arg3.putInt("CF3", 3);
mTabHost.addTab(
mTabHost.newTabSpec("Tab3").setIndicator("CF3",
getResources().getDrawable(R.drawable.tab_rigth)),
CF3Fragment.class, arg2);
return rootView;
}
直到这一点,一切正常,正确的后退导航。 Child Fragment调用对话碎片,如下所示
ConfirmDialogFragment cd = new ConfirmDialogFragment();
cd.show(fm, "Confirm Fragment");
在对话框中我有一个按钮,按下该按钮必须刷新CF1 Fragmnet(从其调用的位置)。它成功刷新CF1片段的新列表,但问题是当我按下后退按钮。在按下它时应该转到F3(从CF1被调用的地方),但它在调用Dialog之前保持在CF1状态。再次按Back将其带到Fragment F3。 我尝试了很多东西,但似乎没有什么对我有用。我假设当从CF1调用Confirm Dialog时,它将自己置于Backstack之上,因此当从CF1按下后退时,它将从Dialog Fragment调用的地方恢复到状态。我知道如果在调用dialogfragment时不能将它放在backstack上,这将解决但是 到目前为止似乎没有任何工作。请指教。
答案 0 :(得分:0)
使用下面的代码从backstack中删除片段
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager .getBackStackEntryCount() > 0){
fragmentManager .popBackStack();
}