安卓x。 FragmentTransaction 动画不适用于 backpress

androidx. FragmentTransaction animation does not work on backpress

我想在后退时播放隐藏动画。 我有以下包的代码工作版本:

android.support.v4.app.Fragment;
android.support.v4.app.FragmentTransaction;

代码如下:

 ft = getSupportFragmentManager().beginTransaction();
 ft.setCustomAnimations(R.anim.slide_in_bottom, R.anim.slide_out_right);
 Fragment fragment = new RegisterFragment();
 ft.replace(R.id.sign_in_fragment, fragment);
 ft.commit();

但现在我正在使用 androidx

androidx.fragment.app.FragmentTransaction;

在这种情况下,后退动画不起作用。它只是不断地删除片段。 井代码略有不同但相同:

    ft = getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_top,  R.anim.slide_out_top, R.anim.slide_out_top,  R.anim.slide_out_top);
    ft.replace(R.id.menu_fragment, menuFragment);
    ft.addToBackStack(null);
    ft.commit();

R.id.menu_fragment 是空的,我 replaceadd 有相同的结果。 我找到了一个建议在片段上添加标签的答案,但它不起作用。

我认为是 androidx 包问题,我不知道要更改什么。 而且项目不允许我使用同样旧的这个包:android.support.v4.app.FragmentTransaction;

怎么办或哪里出错了? 提前致谢。

您可以在 MainActivity 的 onBackPressed 方法中实现动画。

    override fun onBackPressed() {
     val fragment = supportFragmentManager.fragments.last()
     supportFragmentManager.beginTransaction().setCustomAnimations(R.anim.slide_up,R.anim.slide_down).remove(fragment).commit()
    }

检查此代码..

           My_Fragment fragment = new My_Fragment()
            supportFragmentManager.beginTransaction()
                .setCustomAnimations(R.anim.slide_in_right, 
               android.R.anim.fade_out)
                .replace(R.id.container, home_Fragment_admin).commit()

问题似乎是 onBackPressed 函数正在使用的 remove 函数。
因为我的 R.id.menu_fragment 在添加片段时是空的,所以 onBackPressed 函数使用 remove 方法而不是 replace 或其他方法。 这让我想到了 question

我找到了解决这个问题的方法(问题的答案中有建议)但是它很难看。
基本上我所做的是创建其他片段并覆盖 onBackPressed 所以我没有使用 remove 函数而是将其替换为完全被替换动画隐藏的其他片段。

  List<Fragment> fragments = getSupportFragmentManager().getFragments();
  Fragment fragment = fragments.get(fragments.size() - 1);
  getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_out_top, R.anim.slide_out_top).replace(R.id.menu_fragment, exitMenuFragment).commit();

再次进入fragment时匹配了进入和退出的动画; ft.setCustomAnimations(R.anim.slide_in_top, R.anim.slide_in_top);

执行力很差,但只有我发现。