Android片段导航和backstack

时间:2012-11-03 15:14:37

标签: android navigation android-fragments back-stack

我有一个标题栏(有点像菜单)和4个片段(MAIN,A,B,C),MAIN应该是后台堆栈的“主/根”片段。

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

1 个答案:

答案 0 :(得分:4)

您的筹码最多必须包含2个片段

主要是可见的 主要是onBackstack / AorBorC是可见的。 用户点击返回==>主要是可见的。 用户点击返回==>申请结束

我认为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方法。