在使用androidx.FragmentTransaction
进行Fragment切换时,如果动画在返回键上不起作用,可能是由于FragmentManager的回退栈中的Fragment过渡动画被覆盖导致的。以下是一种解决方法:
FragmentTransaction
进行Fragment切换之前,调用addToBackStack()
方法将Fragment添加到回退栈中。例如:getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new FragmentB())
.addToBackStack(null)
.commit();
onCreateView()
方法中,设置Fragment的进入和退出动画。例如:@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_b, container, false);
// 设置进入和退出动画
if (getFragmentManager().getBackStackEntryCount() > 0) {
// Fragment从回退栈中进入时的动画
FragmentManager.BackStackEntry entry = getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount() - 1);
String fragmentTag = entry.getName();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right,
R.anim.slide_in_left, R.anim.slide_out_left);
transaction.replace(R.id.container, new FragmentB(), fragmentTag);
transaction.commit();
}
return view;
}
在上述代码中,我们根据回退栈中的Fragment数量来判断当前Fragment是从前一个Fragment进入,还是从后一个Fragment返回。然后,我们为进入和退出动画设置不同的动画资源。
通过以上步骤,应该能够解决在返回键上动画不起作用的问题。