【发布时间】:2019-04-17 13:29:51
【问题描述】:
我正在将我的ViewPager 迁移到ViewPager2,因为后者应该可以解决前者的所有问题。不幸的是,当将它与FragmentStateAdapter 一起使用时,我找不到任何方法来获取当前显示的片段。
viewPager.getCurrentItem() 给出当前显示的索引,adapter.getItem(index) 通常为当前索引创建一个新的Fragment。除非在getItem() 中保留对所有已创建片段的引用,否则我不知道如何访问当前显示的片段。
对于旧的ViewPager,一种解决方案是调用adapter.instantiateItem(index),它将返回所需索引处的片段。
ViewPager2 有什么遗漏吗?
【问题讨论】:
-
您的查询有什么解决方案吗?
-
不,还没有解决方案。
-
FragmentStateAdapter中的fragmentManager.findFragmentById(getItemId(index).toInt())似乎可以工作,但只有在添加了片段之后。从文档来看,如果片段被移动,这可能不起作用。Default implementation works for collections that don't add, move, remove items -
只是给未来读者的一般说明(我知道这不是你的问题)。如果您正在寻找一种方法来通知片段已显示,您可以使用 ViewModel 并让每个片段观察相同的 ViewModel。然后,如果它们的
javaClass.name与传入的内容匹配,则每个片段都会响应。
标签: android android-viewpager androidx