Android片段导航和backstack

Ner*_*fpl 8 navigation android android-fragments back-stack

我有一个标题栏(有点像菜单)和4个片段(MAIN,A,B,C),其中MAIN应该是backstack的'main/root'片段.

我遇到的问题是当用户通过菜单进行例如MAIN> A> B> C.如果我只是使用backstack它将按相反的顺序进行,我不想要.无论用户如何导航到其中一个,我都需要返回按钮返回MAIN.

在此输入图像描述

我当前的代码(这是错误的,它不在MAIN时退出应用程序,当前片段从其他非MAIN片段切换)看起来像这样:

private void SwitchFragment(Fragment pFragment)
{
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.main_fl_fragmentcontainer, pFragment);
    if (_CurrentFragment == _Frag_Main)
        ft.addToBackStack(null);
    ft.commit();

    _CurrentFragment = pFragment;
}
Run Code Online (Sandbox Code Playgroud)

小智 4

您的堆栈最多必须包含 2 个片段

Main 可见 Main 在 Backstack / AorBorC 上可见。用户点击返回 ==> Main 可见。用户点击返回==>申请结束

我想 A / B / C 显示在同一视图中,所以在这种情况下,

当用户单击您的菜单时,您必须检查当前是否显示 A/ B/C 并将其替换为用户选择的菜单。

private void displayFragment(Fragment pFragment) {
    Fragment fr = getSupportFragmentManager()
            .findFragmentById(R.id.main_fl_fragmentcontainer);        
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.main_fl_fragmentcontainer, pFragment);
    if (_CurrentFragment == _Frag_Main) {
        ft.addToBackStack(null);
    }
    ft.commit();    
    _CurrentFragment = pFragment;
}
Run Code Online (Sandbox Code Playgroud)

可以覆盖OnBackPressed您的活动的方法。