【问题标题】:Android fragments navigation and backstackAndroid Fragments导航和backstack
【发布时间】:2012-10-24 00:14:42
【问题描述】:

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

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

【问题讨论】:

  • 看起来您只将主要片段添加到后堆栈而不是其他片段。

标签: android navigation android-fragments back-stack


【解决方案1】:

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

主要是可见的 Main 是 onBackstack / 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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多