繁体   English   中英

使用ChildFragments android维护片段的Backstack

[英]Maintaining Backstack for Fragment with ChildFragments android

我有一个活动A,称为片段F1。 现在,此片段使用以下代码调用另一个片段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;

    }

到此为止,通过适当的向后导航,一切都可以正常工作。 子片段调用对话框片段,如下所示

            ConfirmDialogFragment cd = new ConfirmDialogFragment();
            cd.show(fm, "Confirm Fragment");

在对话框中,我有一个按钮,按此按钮必须刷新CF1 Fragmnet(从其调用的位置)。 它成功刷新了带有新列表的CF1片段,但是问题是当我按下“后退”按钮时。 按下时,它应该转到F3(从那里调用CF1),但是在调用Dialog之前,它保持CF1的状态。 再按一次Back返回片段F3。 我尝试了很多事情,但似乎没有任何效果。 我假设当从CF1调用Confirm Dialog时,它会将自己置于Backstack的顶部,因此,当从CF1按下Back时,它将恢复到调用Dialog Fragment的状态。 我知道如果在调用dialogfragment时以某种方式未将其放在backstack上,则可以解决此问题,但到目前为止似乎没有任何效果。 请指教。

使用下面的代码从堆栈中删除片段

FragmentManagerfragmentManager = getSupportFragmentManager();

            if (fragmentManager .getBackStackEntryCount() > 0){
                fragmentManager .popBackStack();
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM