带有活动的 NavigationDrawer 与带有片段的 NavigationDrawer

NavigationDrawer with Activities vs. NavigationDrawer with Fragments

提问人:Ionut Ciuta 提问时间:9/7/2015 更新时间:10/5/2015 访问量:8738

问:

以我目前正在开发的应用程序为例: - 它有一个包含多个项目的 navigationDrawer;现在有两个项目我感兴趣,我称它们为 X 和 Y。

  • 单击 X 和 Y 时,都会显示一个包含 x 元素或 y 元素列表的片段

  • selecting 和 x 或 y list 元素显示一个新片段,我在其中显示有关选择项的信息;X 和 Y 元素的视图片段不同

  • 在视图片段中,我可以选择编辑特定元素,从而弹出编辑片段

片段方法有效,但我花了一段时间来管理片段之间的导航。此外,我可能不得不在抽屉中添加一些类似于 X 和 Y 的新物品。我的主要活动,我有抽屉,我做片段切换,已经很密集了,这让我想到了我的问题:我应该从片段切换到活动吗?我正在考虑在选择抽屉项目时开始一个新活动,并处理与该活动中的所选项目相关的列表/查看/编辑片段,而不是处理单个活动中所有项目的所有片段。

这是个好主意吗?是糟糕的设计吗?

安卓 android-fragments 导航-抽屉 android-navigation

评论

0赞 Viktor Yakunin 9/7/2015
你为什么要尝试发明一辆自行车 - 有一种描述的方法和大量的例子。如今,您拥有 NavigationView,可以为您提供开箱即用的材料设计。您的主要活动应管理导航和状态。每个片段都应该给你逻辑分离。如果您的活动中有超过 100 行代码 - 这可能意味着您做错了什么。
0赞 Ionut Ciuta 9/7/2015
感谢您的回答。我刚刚开始研究 NavigationView,我可能也会处理主要活动的事情。再次感谢。

答:

2赞 Nick 9/7/2015 #1

首先,管理片段之间的导航并不困难。您可以查看谷歌的教程。如果您发布代码,我可以建议您进行一些编辑

我认为这是糟糕的设计,原因有两个

  • 大量代码返工
  • 如果要更改导航模式以显示选项卡,则不容易完成。
7赞 Kaveesh Kanwal 9/7/2015 #2

我有以下几点要提交:

  1. 片段方法要好得多。应使用片段为用户提供更好的 UI 体验

  2. 这样想,把你的屏幕想象成一个信息篮子,如果你有另一个篮子(即另一个屏幕),那么,根据我的说法,最好将两个篮子的片段与容器活动一起使用。当然,可以有两个以上的篮子/屏幕。

  3. 没有硬性规定你应该只使用片段或活动,但谷歌说,在可能的情况下使用片段要好得多。

  4. 通常,开发人员使用片段将关联的逻辑组合在一起,这样做要好得多,因为它将提供您尝试执行的任何操作的逻辑分组

  5. 通过容器活动和接口在片段之间传递 java 数据对象也很容易。这也被认为是一种非常模块化的方法。

其余部分取决于您希望如何定义应用程序的流程。我认为在您的方案中使用片段是一种更好的方法。在您认为关联的逻辑已发生巨大变化的任何地方使用容器活动。

评论

0赞 Ionut Ciuta 9/8/2015
我真的很感谢你的帮助。我将保留片段方法并修改我到目前为止编写的代码,以便在片段之间更好地进行通信。多谢!
10赞 Rinav 10/5/2015 #3

我在类似的船上,我使用了 Activities 方法,这样我就可以让每个 Activity 都带有一组片段,用于单击 NavigationView 上的特定导航。显然,我使用的是 NavigationView,但仅使用一个 MainActivity 管理所有这些片段确实是一项痛苦的任务。

我更喜欢 EachActivity 在我们单击导航项时管理自己的片段。这给了我更好的性能,因为我不需要担心这么多片段的生命周期,而且它是 backStack 和添加/删除/显示/隐藏地狱。

我使用以下 SO 问题巧妙地使用实现 NavigationDrawer 的 BaseActivity,并将其与所有其他 Activity 共享。真正的魔力在于它不会重复代码,或者它不仅仅是普通的旧继承技术。

这是链接,请查看

我在我的两个项目中使用了这种方法,它运行得很好,而且我不必从一开始就处理片段管理。

评论

0赞 Ionut Ciuta 10/5/2015
谢谢你的回答。我最终也做了同样的事情,因为我真的很难在一个具有完全不同目的的单个活动片段中进行管理。我最终得到了一个 BaseActivity,就像你提到的,还有一个专门的活动,为每组片段(列表片段、编辑片段、视图)扩展了前一个。片段)
0赞 Rinav 10/5/2015
我很高兴你用字体来表达你的解决方案,你可以接受这个作为你的答案;)