在android中使用底部导航的最佳实践:活动与片段

Posted

技术标签:

【中文标题】在android中使用底部导航的最佳实践:活动与片段【英文标题】:Best practise to use bottom navigation in android: activity vs fragment 【发布时间】:2019-12-17 15:43:32 【问题描述】:

我来自 ios,正在努力将 iOS 应用移植到 android 上。在 iOS 中有故事板,您可以在其中连接不同的视图(活动)并将它们嵌入标签栏和导航栏。我很难理解在 android 中实现底部导航的最佳方法是什么...

假设我有以下 3 个底部导航项

    标签1

    第1.1页 第1.2页

    tab2

    第2.1页 第2.2页 第2.3页

    tab3

    page3.1 第3.2页 第3.3页

作为 tab1 中的示例,我有 page1.1。然后假设我在 page1.1 中有一个按钮,它将我带到 page1.2。如果我从 page1.2 返回,我想返回 page1.1。 page2.1 的情况相同,我可以转到第 2.2 页,从第 2.2 页我可以转到第 2.3 页。我也想从page3.2转到page 1.2

我读过片段是最好的方法(每个 page.x 都将成为具有不同布局的不同片段),但这似乎并不容易。我也读过我可以使用活动,但很多人建议不要使用它

您建议我关注什么?除了片段和活动之外,还有其他解决方案需要考虑吗?谢谢

【问题讨论】:

【参考方案1】:

您应该将片段与单个 Activity 一起使用。如果不这样做,您将不得不在多个活动中复制/包含一个底栏。在某些情况下它可能很有用,但是当切换 Activity 时,您的栏将重新绘制,这可能会导致糟糕的用户体验。

我读过片段是最好的方法(每个page.x都会变成不同布局的不同片段)但是看起来并不容易

使用片段实际上可能比使用活动更容易。如果您使用 Fragments,您可以让一个 Activity 控制正在显示的每个 Fragment,这意味着您可以根据正在显示的 Fragment 控制导航。这样,您可以处理一些不属于通常导航行为的特殊场景。 在活动中做同样的事情会有点困难,因为你必须不断地在 Intents 中传递数据,而且很难控制行为,因为你的逻辑将分布在活动中。

你建议我关注什么?除了片段和活动之外,还有其他解决方案需要考虑吗?

这两个只是推荐的解决方案。如果您的某些 UI 元素在所有页面中都相同,而某些部分不断更改,那么最好使用带有单个 Activity 的 Fragments。对于完全不同的屏幕或不属于您的导航流程的屏幕,您可以为它们添加更多活动而不是片段。 例如,您可以在一个带有底部导航栏的 Activity 中使用 Fragments,但对于设置屏幕或配置文件屏幕,您应该制作单独的 Activity。

【讨论】:

您好,非常感谢!如果你需要做一个像 Facebook 这样的应用程序(多个标签,每个标签有多个导航页面),你更愿意使用片段还是活动? @mactrix 对于主仪表板,我会使用一个包含片段的活动,对于设置,我会使用活动的配置文件屏幕。 @mactrix Fragments 不能独立使用,必须添加到 Activity 中。在此处阅读更多信息developer.android.com/guide/components/fragments 谢谢。是的我明白。必须有一个基础活动来支持 Fragments。好的,所以我将进行 1 项活动和尽可能多的片段。这可能是 20 个片段。你知道我将所有这些片段保存在内存中是否会有问题。我基本上希望每个选项卡都会保留所有片段的内存,以便我可以切换到另一个选项卡并查看最新片段(我不想每次都重新创建片段并重新加载数据) @mactrix 一次只会加载一个片段并且可见,因此没有问题。不要保留对每个片段的引用。现在,您说有 20 个片段,如果它们的布局相同且内容不同,那么为什么不使用 1 个片段并每次传递不同的数据呢?

以上是关于在android中使用底部导航的最佳实践:活动与片段的主要内容,如果未能解决你的问题,请参考以下文章

Android 底部导航栏在 webview 中登录后显示

Android 在活动之间传递大对象的最佳实践?

如何更改底部导航上的非活动颜色?

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

(Android第一行代码实验一)活动的最佳实践

与来自服务的活动(LocalService)通信 - Android 最佳实践