【发布时间】:2023-04-07 13:09:01
【问题描述】:
我已经从 ViewPager 迁移到 ViewPager2
Official guide & blog 很有帮助。
但是当我回到托管 TabLayout 和 ViewPager 的 Fragment 时,我发现在位于 onResume 内部的 ViewPager 的一个页面(Fragment)中工作的代码没有被执行。
如果我更改选项卡,则正确调用 onResume。
我正在使用 JetPack 的导航控制器,其中 ViewPager2 是第二个片段,我正从常规的第三个片段返回。我正在返回调用第三个片段的页面。所以它是一个简单的背部。
viewPager.setOffscreenPageLimit(tabLength) 已就位,因此所有选项卡都可以一次性加载。
也有viewPager.isSaveEnabled = false 加载片段,保留完好。
已尝试选项卡 SelectedListener。但它不会被回调
tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
// not called on back
}
}
我需要为 ViewPager2 的一个特定页面触发一个函数调用
【问题讨论】:
-
你在托管Fragment中使用了viewpager2的三个构造函数中的哪一个?
-
Adapter is class MyAdapter(fm: FragmentActivity) : FragmentStateAdapter(fm) { ...} ViewPager2没有直接的构造函数,但是使用findViewById进行简单的视图绑定
-
抱歉,是指适配器构造函数,您是否尝试过使用
MyAdapter(fm: Fragment) : FragmentStateAdapter(fm) { ...},因为我已经看到在Fragment中使用托管在Activity构造函数中会导致奇怪的生命周期状态问题,因为您当您应该使用子片段管理器时,正在使用与视图页面的子片段相同的片段管理器作为托管片段。见developer.android.com/reference/kotlin/androidx/viewpager2/…
标签: android android-fragments android-viewpager