android - 更改查看寻呼机选择时显示不同的浮动操作按钮 (FAB)
问题描述
描述
我有一个片段,它有一个ViewPager
和BottomAppBar
。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
当 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 观察共享视图模型值,该值定义屏幕上的哪个片段,并且每个片段在它是主要片段时使用它的编号更新共享视图模型值,
推荐阅读
- c# - 如何找到 SkinnedMeshRenderer 的 BoundingBox 的世界坐标
- flutter - 如何在颤动中设置图像适合每台设备
- c# - 程序集没有强名称
- angular - 如何将派生类作为服务注入
- ios - 没有动画的 SwiftUI fullScreenCover
- java - 如何向 HTML 网页中的数据表添加附加功能?
- .net-core - Piranha CMS - UseManager 违反 CORS 政策
- python - 将多个字典读入嵌套列表
- reactjs - Laravel 响应下载问题返回字符而不是文件
- python - adjust_for_ambient_noise 在静默中给出超时错误