更改查看寻呼机选择时显示不同的浮动操作按钮 (FAB)

Show different Floating Action Buttons (FAB) when View Pager selection is changed

描述

我有一个包含 ViewPagerBottomAppBar 的片段。 ViewPager 显示了 3 个片段,每个片段都有自己的 FloatingActionButton(因为我使用的是导航组件,在我的例子中每个片段都是导航图的容器)。

问题

每次用户滑动 ViewPager 时,我都想显示该片段,并且我还想将 FloatingActionButton 附加到 BottomAppBar。问题是 Fragments 对 BottomAppBar 一无所知,因为它们位于不同的模块中。执行此操作的最佳方法是什么?

这个答案分为两部分,有多种方法可以做到。

首先你需要知道每个 Fragment 何时显示,然后触发 Fab 改变。
这可以通过 2 种方法来完成,要么使用 Fragment 生命周期中的更改来触发此更改,要么使用 PageChangeListener。

使用当前版本的 Viewpager,您可以使用 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter#FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager,%20int)

片段的 onResume 方法在成为主要项目(屏幕上显示的项目)时被调用,然后可用于触发 Fab 更改。

替代方法是添加 PageChangeListener 和 onPageSelected(int) 方法 https://developer.android.com/reference/androidx/viewpager/widget/ViewPager#addOnPageChangeListener(androidx.viewpager.widget.ViewPager.OnPageChangeListener)

第二部分,根据选择的选项和项目的结构,您可能需要在 components/fragments.
之间传达更改 这可以通过多种方式完成,最常见的是接口或共享视图模型。
https://androidwave.com/passing-data-between-fragments/

中片段(组件)的更多详细信息

例如
activity 或者可能是 BottomAppBar 实现了一个接口,每个 Fragment 都可以调用它来表示它是主 Fragment

或者 BottomAppBar 观察定义屏幕上哪个 Fragment 的共享视图模型值,并且每个 Fragment 在它是主要 Fragment 时用它的编号更新共享视图模型值,