我有2个行动
Action1
<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" />
Action2
<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" />
我想要的是,当触发第二个操作时,我想清除返回堆栈并仅设置 loginFragment 保留在堆栈中。
只有一个问题是当我执行 Action2 时,“slide_out_right”被执行为退出动画
据我所知,如果我们从堆栈中弹出片段,将触发action1的“popExitAnim”而不是action2的“exitAnim”。
但我想知道如何使片段执行 slip_out_left 动画以退出并将其从堆栈中弹出。
我最终推翻了onCreateAnimation
在调用的片段中navigate
。此示例演示如何按 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)
}
请注意,这种特殊情况部分是由于幻灯片动画的方向性造成的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)