Сложность реверсирования анимации фрагмента с помощью backstack

В настоящее время я пытаюсь реализовать пользовательскую анимацию при изменении фрагментов. Пользовательская анимация работает только в одну сторону и не работает при нажатии кнопки «Назад». При обратном нажатии показывается правильный фрагмент, но без анимации. Мой код для транзакции фрагмента:

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_right, R.anim.slide_out_left);
transaction.replace(R.id.frame_container, fragment, FragmentTag);
transaction.addToBackStack(null);
transaction.commit();

Мой код для анимационных XML-файлов:

//Slide in left
<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="-1280"
        android:valueTo="0"
        android:duration="500"/>
</set>

//Slide out right
<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="-1280"
        android:duration="500"/>
</set>

//Slide in Right
<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="-1280"
        android:valueTo="0"
        android:duration="500"/>
</set>

//Slide out Left
<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="-1280"
        android:duration="500"/>
</set>

Код для onBackPressed()

@Override
public void onBackPressed()
{
    super.onBackPressed();
}

Есть идеи, где я ошибаюсь? Спасибо за любую помощь


person Calum    schedule 13.07.2015    source источник


Ответы (1)


Используйте этот код для onBackPressed:

if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
person Udayaditya Barua    schedule 14.01.2016