【问题标题】:Forcing back button on Fragments在 Fragments 上强制返回按钮
【发布时间】:2014-03-03 22:01:23
【问题描述】:

我环顾四周,但没有找到针对我的特定问题的真正解决方案。所以我有一个导航主活动,它由一个导航抽屉和我的内容的框架布局组成。

在我的导航抽屉中有三个按钮,每个按钮都用一个特定的片段填充框架布局。其中一个片段充当“主视图”,单击该片段中的项目然后打开另一个片段,即“详细信息视图”。

我遇到的问题是:如果我在细节视图片段中,并且我单击导航抽屉中的另一个按钮转到另一个片段,然后单击导航抽屉按钮返回到我的详细信息视图然后没关系,我到那里好。但是,当我点击后退按钮时,它会将我带回到上一个片段而不是主视图片段。有什么办法可以解决这个问题吗?

这是我如何在导航抽屉中的不同片段之间移动的 sn-p:

private void selectItem(int position)
{
    FragmentManager fragmentManager = getFragmentManager();
    Fragment fragment = null;
    Bundle args = new Bundle();

    switch (position)
    {
    case 0:
        fragment = new ReportIt();
        fragment.setArguments(args);
        break;

    case 1:
        Fragment f = fragmentManager.findFragmentByTag("article_view");

        if (f == null)
        {
            fragment = new ReadIt();
            fragment.setArguments(args);
        }
        else
        {
            fragment = f;
        }
        break;

    case 2:
        fragment = new FindIt();
        fragment.setArguments(args);
        break;

    default:
        fragment = new ReportIt();
        fragment.setArguments(args);
        break;
    }

    fragmentManager.beginTransaction()
            .replace(R.id.content_frame, fragment).addToBackStack(null)
            .commit();

    mDrawerList.setItemChecked(position, true);
    setTitle(mNavTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}

我的主视图片段将控制权传递给细节片段:

FragmentManager fragmentManager = getFragmentManager();
            Fragment fragment = new ReadItDetail();

            Bundle args = new Bundle();
            args.putString("ArticleId", pr.GetId());
            fragment.setArguments(args);

            fragmentManager.beginTransaction().addToBackStack(null)
                    .replace(R.id.content_frame, fragment, "article_view")
                    .commit();

从图中可以看出,所有 3 个抽屉式导航按钮都是我的主要活动的一部分。在我的主要活动中还有一个使用所示片段的框架布局。导航抽屉按钮框之外的所有框都是片段。大师和细节是我遇到的问题。当我移动到其他片段,然后回到我的细节片段时,点击后退按钮,我希望它 100% 的时间回到主片段,而不是回到我可能一直在使用的任何其他片段以前。

【问题讨论】:

  • 我对您的应用程序的结构感到困惑。主片段与其他片段的关系在哪里?这些是一一加载的吗?如果是这样,你想回到哪一个?听起来这只是一个后台问题。
  • 我已更新我的信息以澄清。

标签: android navigation fragment back


【解决方案1】:

要控制Fragment 返回的内容,您只需要控制后台堆栈中的条目即可。 FragmentManager 将让您 pop the backstack 这样您就可以在导航到详细信息片段后重置返回的功能。 SO - here's onehere's amonther 上有许多关于此的帖子,提供了更多详细信息。

这样做的一个问题是,通过覆盖后台堆栈的自然流程,您会冒着创建在逻辑上不源于应用程序的导航的风险。但是你比系统更了解你的结构。如果总是从细节到精通是有意义的,那就去做吧。

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多