Анимация фрагментов и заднего стека

У меня возникли проблемы с использованием или пониманием того, как сбрасывание FragmentTransactions с заднего стека обрабатывает пользовательские анимации. В частности, я ожидаю, что он назовет «вне» анимацию, но это не похоже.

У меня есть простой метод обработки транзакции фрагмента (FragmentTransaction), где я добавляю фрагмент и применяю специальный переход, чтобы он исчезал / исчезал. Я также добавляю это в задний стек, чтобы пользователь мог отменить эту транзакцию с помощью кнопки «Назад», по существу, перейти к состоянию до добавления фрагмента.

protected void changeFragment() { FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); ft.add(R.id.fragment_container, new TestFragment()); ft.addToBackStack(null); ft.commit(); } 

Все отлично работает, но когда пользователь нажимает кнопку «Назад», анимации перехода не меняются. Я ожидал, что когда фрагмент будет удален, он будет использовать анимацию постепенного исчезновения. Вместо этого он, кажется, выскакивает (без анимации), а затем контейнер, кажется, исчезает. Я не уверен, что это именно то, что происходит, но фрагмент определенно не исчезает.

Мое приложение использует библиотеку совместимости для добавления поддержки фрагмента, но я предполагаю, что это применимо к Honeycomb (android-11). Кто-нибудь знает, если я просто делаю что-то неправильно здесь или я просто ожидаю слишком многого? В идеале я хотел бы анимировать фрагменты аналогично тому, как Gmail (на Xoom) делает это в отношении перемещения вперед, щелкнув сообщение, а затем обратно, используя кнопку «Назад». Предпочтительно не иметь возможности переопределить функциональность кнопки «Назад» и не отставать от моего собственного состояния фрагмента, поскольку у меня может быть несколько «транзакций», которые я хотел бы отступить, и я не поклонник повторного создания колес.

Также попросил группу разработчиков Android: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

Ошибка была исправлена ​​в версии 3.2 с добавлением следующего нового api:

http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

Следует отметить, что он еще не был перенесен в библиотеку совместимости (как указано в отчете об ошибке).

Я использую это:

 ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out); 

И переходы работают в обратном направлении при нажатии кнопки «Назад».

Это ошибка, посмотрите отчет об ошибке 15623 . Один из участников проекта Android прокомментировал, что исправление было слишком поздно для версии 3.1, но оно должно попасть в следующую версию.

Тот же член далее говорит, что …

Проблема в том, что одни и те же анимации запускаются в поп-операции, как и выполнялись для размещения фрагментов в их текущих местах. Например, в приведенном выше скользящем примере при передовой операции (нажатие старого фрагмента на стек и перемещение нового фрагмента в представлении) мы сдвигаем старый фрагмент из центра влево и сдвигаем новый фрагмент из Прямо в центр. Когда стек выталкивается, эти же анимации запускаются: последний фрагмент анимируется «вне», сдвигая его справа от центра (после чего он исчезает, поскольку он удаляется). Старый фрагмент соскабливается со стека и анимируется из центра влево … прямо на экране.

Intereting Posts
Можно ли установить максимальное время, разрешенное для записи андроида, с использованием намерения? Передача списка из одного действия в другое Инструменты для создания SDK для Android Переменная Xamarin для Android от Activity to Fragment возвращает null Как сделать кнопочный щелчок и просмотреть элемент списка нажмите в настройке просмотра списка в android Как использовать фрагмент диалога? (ShowDialog устарел) Android Ресурсы $ NotFoundException при использовании Robolectric с Gradle Идентификатор списка не найден: android: list Как надежно определить ширину многострочной строки? Android получает Bitmap Rect (левый, верхний, правый, нижний) на холсте Как я могу обновить версию APK, которую я сам не создал Как найти континент в определенном месте с помощью Geocoder в приложении для Android ActiveMQ и другая реализация FOSS JMS для Android Несколько табличных запросов с использованием Azure Mobile Services и Android Как «подождать» темы в Android