Fragment导航配置popUpTo后自定义返回键exit动画失效问题
问题根因
该问题确实是由popUpTo和popUpToInclusive配置搭配正向导航action的调用方式导致的。
你当前配置的action_usersFragment_to_mainFragment本质是正向导航到mainFragment,同时将usersFragment从回退栈中移除,此时触发的是正向导航的动画规则:
enterAnim对应新目标mainFragment的进入动画,所以你能看到slide_in_left效果正常- 因为
popUpToInclusive=true会直接把当前的usersFragment从回退栈中弹出,正向导航的exitAnim逻辑被栈弹出逻辑覆盖,而正向导航流程不会触发popExitAnim配置,所以usersFragment的退出动画丢失。
系统返回键能正常运行动画,是因为系统返回触发的是Navigation组件默认的回退栈弹出逻辑,走的是popEnterAnim和popExitAnim的配置规则,和你主动调用正向action的逻辑完全不同。
解决方案
最简单的适配方案是自定义返回按钮不要调用你定义的这个正向action,直接触发系统回退逻辑即可,效果和系统返回键完全一致:
在自定义返回按钮的点击事件中加入以下代码:
// Kotlin 写法 requireActivity().onBackPressedDispatcher.onBackPressed()
// Java 写法 requireActivity().getOnBackPressedDispatcher().onBackPressed();
如果你的场景确实需要通过自定义action实现回退,需要调整导航配置逻辑:取消popUpTo和popUpToInclusive配置,改为在导航完成后手动处理回退栈,或者将动画配置适配正向导航的栈操作规则,但更推荐直接调用系统回退逻辑,无需额外修改配置,兼容性更好。
内容的提问来源于stack exchange,提问作者Shoaib Khalid
相关产品推荐
相关产品推荐

