【发布时间】:2014-08-18 06:19:32
【问题描述】:
我有一个调用片段 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();
然后 Fragment 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();
Fragment F3 有 3 个子 Fragments(用于 3 个 Tabs),它们是使用 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 调用 dialogfragment 如下
ConfirmDialogFragment cd = new ConfirmDialogFragment();
cd.show(fm, "Confirm Fragment");
在对话框中我有一个按钮,按下它必须刷新 CF1 Fragmnet(从它调用的地方)。它成功地用新列表刷新了 CF1 片段,但问题是当我按下返回按钮时。按下后它应该转到 F3(从调用 CF1 的位置),但在调用 Dialog 之前它仍处于 CF1 状态。再次按返回会将其带到 Fragment F3。 我尝试了很多东西,但似乎没有什么对我有用。我假设当从 CF1 调用 Confirm Dialog 时,它会将自己置于 Backstack 的顶部,因此当从 CF1 按下返回时,它会恢复到调用 Dialog Fragment 的状态。我知道如果在调用 dialogfragment 时不以某种方式将其放在 backstack 上,这将得到解决,但是 到目前为止,似乎没有任何工作。请指教。
【问题讨论】: