gpt4 book ai didi

Android 导航组件弹出过渡问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:05:59 25 4
gpt4 key购买 nike

我有2个 Action

Action 1

 <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 2

<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" />

我想要的是当第二个 Action 被触发时我想清除返回堆栈并只设置 loginFragment 保留在堆栈中。

只有一个问题是当我执行 Action2 时,“slide_out_right”作为退出动画执行

我知道如果我们从堆栈中弹出 fragment ,将触发 action1 的“popExitAnim”而不是 action2 的“exitAnim”。

但我想知道如何让 fragment 执行 slide_out_left 动画以退出并将其从堆栈中弹出。

最佳答案

我最终在调用 navigate 的 fragment 中覆盖了 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)
}

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

关于Android 导航组件弹出过渡问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53976785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com