安卓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 是空的,我 replace 但 add 有相同的结果。
我找到了一个建议在片段上添加标签的答案,但它不起作用。
我认为是 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);
执行力很差,但只有我发现。
我想在后退时播放隐藏动画。 我有以下包的代码工作版本:
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 是空的,我 replace 但 add 有相同的结果。 我找到了一个建议在片段上添加标签的答案,但它不起作用。
我认为是 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);
执行力很差,但只有我发现。