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

sun*_*son 7 android android-fragments android-navigation android-recyclerview android-viewpager2

我有一个Viewpager2内部Fragment(称为HomeFragment)。那Viewpager本身也包含着Fragments。当我离开HomeFragment它的视图时,其视图将被破坏,而当我向后导航时,将重新创建该视图。现在,我设置的适配器Viewpager2HomeFragment过程中onViewCreated()。因此,当我回到该适配器将被重新创建HomeFragment,这也重新创建所有FragmentsViewpager2和当前项目重置为0,如果我尝试重新使用的适配器,我实例化第一个创建的HomeFragment我得到一个异常,因为此检查位于FragmentStateAdapter

public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        checkArgument(mFragmentMaxLifecycleEnforcer == null);
Run Code Online (Sandbox Code Playgroud)

有人知道我在回溯时如何防止重新创建所有内容吗?否则,这是相当大的性能开销,并且会阻碍我的用户体验。

小智 0

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

以前的:

class HomeFragmentAdapter() : FragmentStateAdapter(fragment)
Run Code Online (Sandbox Code Playgroud)

现在:

class HomeFragmentAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity)
Run Code Online (Sandbox Code Playgroud)

或者

// needs FragmentActivity's lifecycle
FragmentStateAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle)
Run Code Online (Sandbox Code Playgroud)