【问题标题】:androidx. FragmentTransaction animation does not work on backpress安卓x。 FragmentTransaction 动画在 backpress 上不起作用
【发布时间】:2020-01-03 13:12:30
【问题描述】:

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

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;

该怎么办或我在哪里犯了错误? 提前致谢。

【问题讨论】:

    标签: android android-fragments androidx


    【解决方案1】:

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

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

    【讨论】:

    • 这段代码不起作用,但它非常有帮助,因为它让我意识到问题出在 remove 函数 上,这导致我质疑“如何动画片段删除”@ 987654321@帮了我,谢谢。
    • 我很高兴能帮上忙 ^^
    【解决方案2】:

    检查此代码..

               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()
    

    【讨论】:

    • 此代码几乎与 OP 发布的代码完全相同,除了 addToBackStack...
    • 我确定它确实/确实如此,但这并不能改变它与 OP 的代码相同但对他/她不起作用的事实。
    • 好代码。但问题是,当您替换或添加空 FragmentView 时,这不起作用。 OnBackpress 函数调用的 remove 函数,当没有什么可以替换回来,并且 remove 有动画问题,在这个 [question] (stackoverflow.com/questions/13982240/…) 中说过
    【解决方案3】:

    问题似乎是 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();
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      相关资源
      最近更新 更多