我想在其入口处向上滑动一个片段,并在其出口处向下滑动它。它应该很简单,但是我面临着问题。
动画代码: 向下滑动->
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0%p"
android:interpolator="@android:anim/accelerate_interpolator" />
向上滑动->
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0%p"
android:toYDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator" />
这是我的片段过渡代码:
try {
if (fragment != null && mSelectedTabIndex != NO_TAB) {
FragmentTransaction ft = createTransactionWithOptions(transactionOptions);
detachCurrentFragment(ft);
ft.setCustomAnimations(R.animator.slide_up,R.animator.slide_down,R.animator.slide_up,R.animator.slide_down);
ft.add(mContainerId, fragment, generateTag(fragment));
ft.commit();
executePendingTransactions();
mFragmentStacks.get(mSelectedTabIndex).push(fragment);
mCurrentFrag = fragment;
if (mTransactionListener != null) {
mTransactionListener.onFragmentTransaction(mCurrentFrag, TransactionType.PUSH);
}
}
}catch (Exception e)
{
e.printStackTrace();
}
但是我没有得到期望的结果。而且我不想替换片段,但总是添加片段。
答案 0 :(得分:1)
尝试从anim文件夹动画中使用此简单解决方案。
替换 这个
fragmentTransaction.replace(R.id.frame, firstFragment, "fragment_class_name");
使用
fragmentTransaction.add(R.id.frame, firstFragment, "fragment_class_name");
示例
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_up, R.anim.slide_up);
fragmentManager.addOnBackStackChangedListener(this);
fragmentTransaction.add(R.id.frame, firstFragment, "fragment_class_name");
fragmentTransaction.addToBackStack("fragment_class_name");
fragmentTransaction.commit();
使用添加片段的原因 重要的区别是:
replace
删除了现有的fragment
并添加了一个新的fragment
。
但是add
保留现有的片段并添加一个新的片段,这意味着现有的片段将处于活动状态,并且它们不会处于“暂停”状态,因此当按下后退按钮时onCreateView()
不会被调用现有的fragment
(添加新fragment
之前的fragment
)。
查看屏幕截图