Анимация фрагментов и задний стек - PullRequest
54 голосов
/ 16 марта 2011

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

У меня есть простой метод для обработки транзакции фрагмента (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 ]

49 голосов
/ 08 июня 2012

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

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

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

29 голосов
/ 01 октября 2011

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

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

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

5 голосов
/ 06 июля 2011

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

Тот же член продолжает, что ...

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

...