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


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

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

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

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

3 54

3 ответа:

ошибка была исправлена в версии 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, но он должен сделать это в следующем выпуске.

тот же член продолжает говорить это...

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