深度导航中的 Android 导航抽屉

Posted

技术标签:

【中文标题】深度导航中的 Android 导航抽屉【英文标题】:Android Navigation Drawer in Deep Navigation 【发布时间】:2013-06-20 09:56:16 【问题描述】:

我的应用正在根 Activity 的布局中使用新的 Navigation Drawer。抽屉中的每个项目都是一个片段(就像示例项目演示的那样)。但是,我有更深入的导航,并且指南状态, “如果你有特别深的分支,导航到应用程序的顶层可能会变得重复和麻烦,单独使用 Up 和 Back。由于导航抽屉可以从应用程序的任何位置访问,导航到顶层更快、更有效" 这意味着抽屉应该可以通过从屏幕左侧在应用程序的几乎任何位置(参见 Play Music 示例)进行滑动访问,而不仅仅是在根 Activity 处。

由于我的更深层次的导航包括新的活动,而不仅仅是堆叠的更多片段,我如何仍然应用我的主导航抽屉来更快地导航到整个应用程序中的顶部项目(片段)?

【问题讨论】:

在所有子活动中也包含导航抽屉。 不过,我需要复制大量代码和布局才能做到这一点。没关系;我只是想确保这是最好的方法。 【参考方案1】:

Google 在解释这一点方面确实做得很差,因为我自己花了一段时间才找到它。处理此问题的正确方法是使用FragmentTransactions 在现有导航抽屉布局中添加/替换容器,特别是addToBackStack() 方法告诉android 将其视为导航事务。

我不得不从他们的文章Providing Proper Back Navigation 中拼凑出这一点,该文章解释了它是如何为 Fragments 完成的。一个很酷的花絮是你不必在彼此之上“添加”片段,你可以替换活跃的片段。当用户点击“返回”时,Android 的FragmentManager 将弹出该事务并将其反转回之前的状态。

此外,您可能还想在您的事务上调用setTransition(int transit) 以使其像活动一样进行动画处理。这是我在项目中使用的示例:

getFragmentManager().beginTransaction()
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .replace(R.id.container, newFragment);
                    .addToBackStack(null);
                    .commit();

从这里点击“返回”将执行相反的动画并返回到事务发生之前的先前状态。

我知道我迟到了,但希望它对某人有所帮助!

【讨论】:

以上是关于深度导航中的 Android 导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章

所有活动中的Android导航抽屉[重复]

导航抽屉和Android中的活动

Android:更改导航抽屉应用程序中的当前内容,而不在抽屉菜单中显示项目

当点击导航抽屉中的项目时,程序在android中终止

在 Android 中禁用导航抽屉中的项目

Android中的导航抽屉空指针异常