我在Viewpager2
内有一个Fragment
(我们称它为HomeFragment
)。 Viewpager
本身也包含Fragments
。当我离开HomeFragment
时,其视图将被破坏,而当我向后导航时,将重新创建该视图。现在,我在Viewpager2
期间将HomeFragment
的适配器设置在onViewCreated()
中。因此,当我导航回到HomeFragment
时,将重新创建适配器,该适配器还将重新创建Fragments
中的所有Viewpager2
,并且当前项将重置为0。如果我尝试重新使用实例化的适配器首次创建HomeFragment
i会产生异常,因为FragmentStateAdapter
内部有此检查:
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
checkArgument(mFragmentMaxLifecycleEnforcer == null);
有人知道如何在导航时不能阻止重新创建所有内容吗?否则,这会带来很大的性能开销,并妨碍我的用户体验。
我使用FragmentActivity
而不是Fragment
作为适配器的构造函数的参数,并且可以正常工作。当导航回HomeFragment
时,将重新创建适配器,但不会重新创建子片段。
上一个:
class HomeFragmentAdapter() : FragmentStateAdapter(fragment)
现在:
class HomeFragmentAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity)
或
// needs FragmentActivity's lifecycle
FragmentStateAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle)