Android系统。导航抽屉。 Fragment中的Backstack问题

时间:2014-10-02 12:52:14

标签: android android-fragments navigation android-fragmentactivity back-stack

我正在尝试使用导航抽屉实现应用。 我在Eclipse上创建了应用程序。 这是默认(或模板)导航抽屉应用程序。 MainActivity具有根FrameLayout,其在不同时间包括不同的片段。 默认情况下,它包含片段A. 当从导航抽屉中选择项目B时,它将把片段A替换为片段B.

MainActivity:

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.container, fragmentB);
transaction.addToBackStack(null);
transaction.commit();

FragmentB是fragmentB2,FragmentB3等的根片段。 我认为通过这种方式,保存片段状态会更容易。 它只为FragmentB2保存片段状态。

FragmentA(root A)onCreateView():

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    /* Inflate the layout for this fragment */
    View view = inflater.inflate(R.layout.fragment_balance_root, container,
            false);

    FragmentTransaction transaction = getChildFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.balance_root_frame, MainActivity.balanceMainFragment);
    transaction.addToBackStack(null);
    transaction.commit();

    return view;
}

FragmentA2 OnCreateView():

    View rootView = inflater.inflate(R.layout.fragment_balance_main,
            container, false);
    return rootView;

FragmentB(root B)onCreateView():

FragmentTransaction transaction = getChildFragmentManager()
        .beginTransaction();
transaction.replace(R.id.tariffs_root_frame, MainActivity.tariffsMainFragment);
transaction.addToBackStack(null);
transaction.commit();

FragmentB2:

private static void goToTariffInfo() {
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.tariffs_root_frame, new TariffsInfoFragment());
    transaction.addToBackStack(null);
    transaction.commit();
}

片段B3:

View rootView = inflater.inflate(R.layout.fragment_tariffs_info,
        container, false);
return rootView;

我有很多问题,但它们彼此相关。 1.如何避免在backstack中保存根片段? 当我按下片段A2上的后退按钮时,它会转到A1,这是空白的。 我试图从MainActivity中删除addToBackStack。这导致仅退出一个按下按钮。 我试图从FragmentA中删除addToBackStack。没效果。

2.如何为不同的片段集合设置单独的backstack? 例如:导航抽屉包括2个项目:ItemA和ItemB。 每个项目都可以视为一个部分。 FragmenA-> FragmentA2-> FragmentA3 FragmentB-> FragmentB2-> FragmentB3 但在我的情况下,当我点击片段B2上的后退按钮时,不知何故应用程序返回到片段A2(之前已打开) 即使在片段B3上,后退按钮也会导致片段A2。 如何解决这些问题?

0 个答案:

没有答案