Подтвердить что ты не робот

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

У меня возникли проблемы с использованием или пониманием того, как 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

4b9b3361

Ответ 2

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

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

и переходы работают в обратном порядке, когда нажата кнопка "Назад".

Ответ 3

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

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

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