android - 使用 ViewPager2 获取当前片段
问题描述
我正在迁移ViewPager
到,ViewPager2
因为后者应该解决前者的所有问题。不幸的是,当将它与 a 一起使用时FragmentStateAdapter
,我找不到任何方法来获取当前显示的片段。
viewPager.getCurrentItem()
给出当前显示的索引并且adapter.getItem(index)
通常为当前索引创建一个新Fragment
的. 除非保留对所有已创建片段的引用,否则getItem()
我不知道如何访问当前显示的片段。
对于旧的ViewPager
,一种解决方案是调用adapter.instantiateItem(index)
它将在所需索引处返回片段。
我错过了什么ViewPager2
吗?
解决方案
默认情况下,在ViewPager2
FragmentManager 中已将标签分配给片段,如下所示:
第一个位置的片段有一个标签"f0"
第二个位置的片段有一个标签"f1"
第三个位置的片段有一个标签,"f2"
依此类推......所以你可以得到你的片段的标签,并将“f”与你的片段的位置连接起来。要获取当前 Fragment,您可以从 viewPager2 位置获取当前位置,并使您的标签像这样(对于 Kotlin):
val myFragment = supportFragmentManager.findFragmentByTag("f" + viewpager.currentItem)
对于某个位置的片段
val myFragment = supportFragmentManager.findFragmentByTag("f" + position)
如果您使用此技术,您可以转换 Fragment 并始终检查它是否不为空。
如果您在 Fragment 中托管 ViewPager2,请childFragmentManager
改用。
记住
如果您overriden
的getItemId(position: Int)
适配器中有 。那么你的情况就不同了。它应该是:
val myFragment = supportFragmentManager.findFragmentByTag("f" + your_id_at_that_position)
或简单地说:
val myFragment = supportFragmentManager.findFragmentByTag("f" + adapter.getItemId(position))
如果您将 ViewPager2 托管在 Fragment 中,请childFragmentManager
使用supportFragmentManager
.
推荐阅读
- json - 将检索到的 json 转换为颤振中的自定义对象列表
- javascript - 为什么 ngIf 不适用于类属性
- android - OnPause() 中的公共字符串数组
- windows - 如何检查文件扩展名?
- mysql - MYSQL如何将当前余额查询为以前的余额
- jmeter - Jmeter 结果未发布到仪表板
- c# - uwp C#中其他页面的图像突出显示信息
- asp.net-mvc - Bootstrap textarea 显示 html 和阻止按钮
- python - 在 python docker 映像上安装 simstring (SWIG)
- javascript - Facebook Graph API - 获取用户共享的帖子覆盖率