簡體   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