安卓碎片化导航和返回堆栈

8
我有一个标题栏(类似于菜单),和4个碎片(MAIN,A,B,C),其中MAIN应该是回退堆栈的“主/根”碎片。
我的问题是,当用户通过菜单进入 MAIN > A > B > C 等路径时,如果我简单地使用回退堆栈,它将按相反的顺序返回,这不是我想要的。 无论用户如何导航到这3个碎片之一,我都需要后退按钮返回到MAIN。
下图是示意图:enter image description here 我的当前代码(错误的是:不在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;
}

看起来你只将主要片段添加到返回栈中,而不是其他的。 - S.D.
1个回答

4

您的堆栈最多只能包含2个片段

主要界面可见 主要界面已添加到返回栈 / A或B或C可见。 用户点击返回 ==> 主要界面可见。 用户点击返回 ==> 应用程序结束

我假设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;
}

您可以重写活动的 OnBackPressed 方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接