首页 > 解决方案 > 更改查看寻呼机选择时显示不同的浮动操作按钮 (FAB)

问题描述

描述

我有一个片段,它有一个ViewPagerBottomAppBarViewPager正在显示 3 个片段,每个片段都有自己的FloatingActionButton(因为我正在使用导航组件,在我的情况下,每个片段都是导航图的容器)。

在此处输入图像描述

问题

每次用户滑动时,ViewPager我都想显示片段,并且我想FloatingActionButtonBottomAppBar. 问题是 Fragments 对它们一无所知BottomAppBar,因为它们位于单独的模块中。做这个的最好方式是什么?

标签: androidandroid-viewpagerandroid-architecture-navigation

解决方案


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

首先,您需要知道每个 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当 Fragment 成为主要项目(屏幕上显示的那个)时,会调用 Fragment 的方法,然后可以使用它来触发 Fab 更改。

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

第二部分,取决于选择的选项和项目的结构,您可能需要在组件/片段之间传达该更改。
这可以通过多种方式完成,最常见的是接口或共享视图模型。在https://androidwave.com/passing-data-between-fragments/
中有关片段间(组件)的更多详细信息

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

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


推荐阅读