当前位置: 首页 > 知识库问答 >
问题:

Android导航组件弹出到过渡问题

松增
2023-03-14

我有两个动作

 <action
        android:id="@+id/actionBaseFragmentToAskForLocation"
        app:destination="@+id/introAskForLocationFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
<action
        android:id="@+id/actionIntroAskLocationToLogin"
        app:destination="@id/loginFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/fade_out"
        app:popUpTo="@+id/app_main_navigation" />

但是我想知道如何使片段在退出时执行slide_out_left动画,并将其弹出堆栈。

共有1个答案

公孙琛
2023-03-14

最后,我在调用navigate的片段中重写了oncreateanimation。下面的示例显示了如何通过ID在嵌套的导航图中导航,以及如何条件性地替换pop退出动画(或popexitanim)。

override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
    val navController = findNavController()
    val graph = navController.graph.findNode(R.id.onboardingGraph) as NavGraph
    val dest = graph.findNode(R.id.confirmationFragment)
    if (!enter && dest != null && navController.currentDestination?.id == dest.id) {
        return AnimationUtils.loadAnimation(requireContext(), R.anim.slide_out_left)
    }
    return super.onCreateAnimation(transit, enter, nextAnim)
}

请注意,这种特殊情况部分是由于幻灯片动画的方向性。

 类似资料:
  • 导航过渡是一个应用中状态之间的切换,例如从一个高层级的页面切换到一个具体的页面。最主要,但不是全部,过渡在本质上是层级。 这些转变应该合适地展示用户浏览一个应用的每个状态。 父元素到子元素 兄弟元素到兄弟元素 父元素到子元素 查看一个应用的更深的层级或者页面,是从父页面开始的。在父页面上会有很多的子页面可供用户浏览,这些都是父页面的子页面。 在 material design 中,高度变化意味着从

  • 我正在一个新的Android应用程序上使用导航组件,但我不知道怎么做 首先,我有我的主活动,我有main_navigation_graph 主要活动 NavHostFragment main_navigation_graph里面有3个碎片 这里一切都很好。问题是当我到达最后一个片段时,因为在这个片段上,我想根据BottomNavigationView输入(暂时)显示一些子片段(在新的NavHost

  • 我正在使用Android导航组件,尽管在刚开始的时候有一些问题,但它现在运行良好。 我坚持一个活动,许多片段设计原则,我使用共享视图模型在片段之间进行通信。 我现在在我的应用程序中有一个场景,用户创建一些东西,保存它,并返回到主列表片段(想想像添加一个新联系人,除了它涉及的不仅仅是在一些框中输入) 当用户保存信息时,我需要从视图模型中清除数据(这是由于安全问题而不是性能),因为它们是共享视图模型,

  • 我正在使用NavController:。一切都很好,直到我旋转我的设备,然后我无法和。 在日志中:FragmentNavigator:忽略popBackStack()调用:FragmentManager已保存其状态,而FragmentNavigator:忽略导航()调用:FragmentManager已保存其状态 当我看到谷歌的样本,他们没有任何关于这个问题,有所有的工作良好。所以我不明白这就是问

  • 实际上,我正在我的应用程序中使用新的架构组件,并且我已经设置了导航组件。我有一个导航抽屉,我想用它。我已经设置好了,但我面临一些问题: 1-抽屉不会自动关闭。菜单正常工作并导航到正确的位置,但导航后不会关闭。我必须添加一个目的地ChangedListener才能自己关闭它。 在代码实验室里,抽屉自动关闭,我真的不明白为什么。 2-向上按钮打开抽屉。当我导航到非顶级片段时,菜单图标变为向上箭头,但当

  • 我正在将我的应用程序转换为使用一个活动并添加了BottomNavigationView,并努力防止在片段之间导航时重新创建片段,进行不必要的api调用。但是我无法使它工作: 不显示片段 图标未切换 触摸底部菜单项不会切换片段 触摸所选项目会使应用崩溃,并带有 TypeCastException: 活动的布局: 底部导航菜单: 在主活动中: 导航扩展: 屏幕为空白,未呈现任何片段视图。 有人能帮我解