带有片段和Jetpack导航的Viewpager2:恢复片段而不是重新创建它们

问题描述 投票:11回答:1

我在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);

有人知道如何在导航时不能阻止重新创建所有内容吗?否则,这会带来很大的性能开销,并妨碍我的用户体验。

android android-fragments android-recyclerview android-navigation android-viewpager2
1个回答
0
投票

我使用FragmentActivity而不是Fragment作为适配器的构造函数的参数,并且可以正常工作。当导航回HomeFragment时,将重新创建适配器,但不会重新创建子片段。

上一个:

class HomeFragmentAdapter() : FragmentStateAdapter(fragment)

现在:

class HomeFragmentAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity)

// needs FragmentActivity's lifecycle
FragmentStateAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle)
© www.soinside.com 2019 - 2024. All rights reserved.