gpt4 book ai didi

android - 使用 ViewPager2 获取当前 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:16 63 4
gpt4 key购买 nike

我正在将我的 ViewPager 迁移到 ViewPager2,因为后者应该可以解决前者的所有问题。不幸的是,当它与 FragmentStateAdapter 一起使用时,我找不到任何方法来获取当前显示的 fragment 。

viewPager.getCurrentItem() 给出当前显示的索引,adapter.getItem(index) 通常为当前索引创建一个新的 Fragment .除非在 getItem() 中保留对所有创建的 fragment 的引用,否则我不知道如何访问当前显示的 fragment 。

对于旧的 ViewPager,一种解决方案是调用 adapter.instantiateItem(index),它会返回所需索引处的 fragment 。

我是否遗漏了 ViewPager2 的内容?

最佳答案

ViewPager2 中,FragmentManager 默认已将标签分配给这样的 fragment :

第一个位置的 fragment 有一个标签"f0"

第二个位置的 fragment 有一个标签"f1"

第 3 个位置的 fragment 有一个标签 "f2" 等等...所以您可以通过将“f”与 fragment 的位置连接起来来获取 fragment 的标签。要获取当前 fragment ,您可以从 viewPager2 位置获取当前位置,并像这样制作您的标签(对于 Kotlin):

val myFragment = supportFragmentManager.findFragmentByTag("f" + viewpager.currentItem)

对于某个位置的 fragment

val myFragment = supportFragmentManager.findFragmentByTag("f" + position)

如果您使用这种技术,您可以转换 Fragment 并始终检查它是否不为 null。

如果您在 Fragment 中托管 ViewPager2,请改用 childFragmentManager

记住

如果您在适配器中覆盖 getItemId(position: Int)。那么你的情况就不同了。应该是:

val myFragment = supportFragmentManager.findFragmentByTag("f" + your_id_at_that_position)

或者简单地:

val myFragment = supportFragmentManager.findFragmentByTag("f" + adapter.getItemId(position))

如果您在 Fragment 中托管 ViewPager2,请使用 childFragmentManager 而不是 supportFragmentManager

关于android - 使用 ViewPager2 获取当前 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728719/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com