【问题标题】:onResume not called for back in ViewPager2 (Page/Fragment)在 ViewPager2(页面/片段)中未调用 onResume
【发布时间】: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


【解决方案1】:

现在修复了。

我期待在 Viewpager2(页面)的片段之一的 onResume 内调用。

MyAdapter(fm: FragmentActivity) :FragmentStateAdapter(fm) { ...} 的排列正在到达第二个片段的 onResume,一个具有 ViewPager2 适配器的片段。

第二个片段的 onResume 中的requireActivity() 是返回的 FragmentActivity 的实例,它可以被类型转换为持有活动。

这种安排足以让我处理MyAdapter(fm: Fragment) 导致状态保存和恢复问题的最少问题。

感谢您的帮助,安德鲁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多