使用导航架构时如何设置“允许重新排序”?

Posted

技术标签:

【中文标题】使用导航架构时如何设置“允许重新排序”?【英文标题】:How to set `setReorderingAllowed` when using Navigation Architechture? 【发布时间】:2020-12-12 22:58:51 【问题描述】:

在使用导航架构时延迟片段的进入转换时,图表中的“主页”片段会显示一微秒。谷歌搜索了一下后,文档告诉我在 fragmentManager 上设置setReorderingAllowed(true) 以优化此流程。但是,文档不使用导航架构组件。

请问setReorderingAllowed(true) 使用导航架构组件时如何实现?

【问题讨论】:

您可以在 NavHostFragment 的 childFragmentManager 上设置一些属性。这是你需要的吗? 谢谢,但是不,我没有在其中或其任何属性中找到 setReorderingAllowed 方法。 也许某种 hack like this 应该会有所帮助。没有其他想法。 谢谢!实际上,该线程中的其他 cmet 之一帮助了我!我已经在那里调用了postponeEnterTransitionstartPosponedEnterTransition,但是在父片段上调用它们解决了我的问题!参考此评论:github.com/android/architecture-components-samples/issues/… 再次感谢! 【参考方案1】:

setReorderingAllowed(true) 是在使用naivate() 时自动设置的。见FragmentNavigator实现:

    public NavDestination navigate(@NonNull Destination destination, @Nullable Bundle args,
            @Nullable NavOptions navOptions, @Nullable Navigator.Extras navigatorExtras) 

        // OTHER CODE
        // OTHER CODE

        ft.setReorderingAllowed(true);
        ft.commit();
        // The commit succeeded, update our view of the world
        if (isAdded) 
            mBackStack.add(destId);
            return destination;
         else 
            return null;
        
    

【讨论】:

以上是关于使用导航架构时如何设置“允许重新排序”?的主要内容,如果未能解决你的问题,请参考以下文章

使用导航架构操作点击返回按钮时如何避免片段重新创建?

如何使用导航架构组件创建 BottomSheetDialogFragment?

底部应用栏在使用片段导航时向上/向下滑动(导航架构组件)

在 FAB 单击时导航到片段(导航架构组件)

在导航控制器上添加片段而不是替换片段?

导航架构片段重载问题