Я использую транзакции фрагментов для переключения между компонентами при нажатии кнопки. Чтобы улучшить общее впечатление, я добавил пользовательские анимации для анимации старого фрагмента слева и нового фрагмента справа.
Код для запуска этой транзакции выглядит следующим образом:
supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left)
.replace(R.id.fragment_container, contentModel.contentFragment, CONTENT_FRAGMENT_TAG)
.commit()
Анимации, которые я использую, выглядят так для enter_from_right.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:startOffset="450">
<translate
android:fromXDelta="100%"
android:toXDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="500"/>
</set>
и exit_to_left.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="-100%"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="500"/>
</set>
РЕДАКТИРОВАТЬ Фрагменты, которые я заменяю, выглядят так:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop=“20”
android:layout_margin=“10”
android:orientation="vertical">
<TextView
android:lineSpacingExtra=“7”
android:id="@+id/questionTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom=“10”
tools:text=“Question title text“/>
<LinearLayout
android:id="@+id/textInputContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- Dynamically filled with TextInputLayout and TextInputEditText elements containing answers -->
</LinearLayout>
<FrameLayout
android:layout_marginTop=“10”
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:id="@+id/nextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text=“Next question” />
</FrameLayout>
</LinearLayout>
Однако, если я приостанавливаю приложение (нажмите кнопку «Домой»), когда транзакция фрагмента занята анимацией (так между нажатием кнопки и + - 1 секунда), а затем я возвращаюсь к представлению, происходит следующее странное поведение:
Фрагмент, который я заменяю (поэтому тот, который должен быть удален после анимации), все еще виден на экране, но я не могу с ним взаимодействовать, и он не отображается нигде в инспекторе макетов Android Studio.
Он также не идет за нормальным контентом, он идет перед обычным контентом (но через него проходят клики).
Единственная вещь, которая, кажется, работает, но я не хочу использовать это, это добавить addToBackStack к транзакции, так как я не использую стек обратной транзакции, а затем мне нужно добавить некрасивый код, чтобы очистить обратную стек.
Интересно, сталкивался ли кто-нибудь еще с этой проблемой и нашел ли ее хорошее решение?