You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment横向滑动动画问题:仅进入生效,返回无动画效果

Fragment返回时无滑入/滑出动画的解决方案

你遇到的问题并非调用getActivity().onBackPressed()导致的,核心原因是setCustomAnimations()的参数设置不完整——你仅指定了进入新Fragment和移除旧Fragment的动画,但返回栈时,还需要额外配置当前Fragment退出和前一个Fragment重新显示的动画。

修改后的代码示例

使用setCustomAnimations()的四参数重载方法,明确返回过程的动画逻辑:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// 四个参数依次为:新Fragment进入动画、旧Fragment移除动画、返回时当前Fragment退出动画、返回时前一个Fragment显示动画
transaction.setCustomAnimations(
    R.anim.slide_in_right,    // EditFragment从右侧滑入
    R.anim.slide_out_left,    // 原Fragment向左侧滑出(可根据需求调整)
    R.anim.slide_in_left,     // 返回时原Fragment从左侧滑入
    R.anim.slide_out_right    // 返回时EditFragment向右侧滑出
);
EditFragment edit = EditFragment.newInstance();
transaction.replace(android.R.id.content, edit, "editFragment");
transaction.addToBackStack("editFragment");
transaction.commit();

补充对应的动画文件

你需要新增以下两个动画XML文件,放在res/anim/目录下:

  1. slide_in_left.xml(原Fragment返回时的滑入动画):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="-100%"
        android:toXDelta="0%" />
</set>
  1. slide_out_right.xml(EditFragment返回时的滑出动画):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0%"
        android:toXDelta="100%" />
</set>

额外说明

调用getActivity().onBackPressed()是触发Fragment返回栈的正确方式,它会触发FragmentManager弹出栈顶事务,并执行你配置的返回动画。

内容的提问来源于stack exchange,提问作者Duddie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:25:18