android - Android导航组件弹出过渡问题
问题描述
我有 2 个动作
行动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" />
行动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" />
我想要的是当第二个动作被触发时,我想清除后台堆栈并仅设置 loginFragment 以保留在堆栈中。
只有一个问题是当我执行 Action2 时,“slide_out_right”作为退出动画执行
我知道如果我们从堆栈中弹出片段,将触发 action1 的“popExitAnim”而不是 action2 的“exitAnim”。
但我想知道如何让片段执行 slide_out_left 动画以退出并将其从堆栈中弹出。
解决方案
我最终覆盖onCreateAnimation
了调用navigate
. 这个例子展示了如何通过 ID 导航嵌套的导航图并有条件地替换弹出退出动画(或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)
}
请注意,这种特殊情况部分是由于幻灯片动画的方向性。
推荐阅读
- windows - 如何从安装在 Windows 10 上的 Wampserver 3 编辑/保存远程共享文件夹中的文件?
- python - 如何解决:Gcloud compute ssh SFATAL ERROR: No supported authentication methods available (server sent: publickey)
- python - Pandas 展平和合并多头数据帧和连接头名称
- javascript - 谷歌脚本将明天的日期与谷歌表单日期输入匹配
- highcharts - 如何在 Highcharts 中创建具有动态系列的堆积柱形图
- python - 生成 rsa 密钥对然后在对象上使用 copy.deepcopy() 会产生酸洗错误!请问有什么帮助吗?
- angular - 我的角度服务返回未定义的值
- docker - Docker 构建命令没有显示输出
- kotlin - 带变量的注释参数
- qt - 如何像 QT Creator 一样创建“左侧导航工具栏”