Ответ 1
Ошибка была исправлена в версии 3.2 с добавлением следующего нового api:
Следует отметить, что он еще не был перенесен в библиотеку совместимости (как указано в отчете об ошибке).
У меня возникли проблемы с использованием или пониманием того, как 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:
Следует отметить, что он еще не был перенесен в библиотеку совместимости (как указано в отчете об ошибке).
Я использую это:
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);
и переходы работают в обратном порядке, когда нажата кнопка "Назад".
Это ошибка, посмотрите отчет об ошибке 15623. Один из участников проекта Android прокомментировал, что исправление было слишком поздно для версии 3.1, но оно должно попасть в следующую версию.
Тот же член далее говорит, что...
Проблема в том, что анимации запускаются при поп-операции как это было сделано, чтобы положить фрагменты в их текущие места. Например, в приведенный выше пример скольжения, на вперед (нажатие на старую фрагмент в стек и перемещение новый фрагмент в поле зрения), мы старый фрагмент из центра в слева и сдвиньте новый фрагмент в справа от центра. Когда стек выскочил, эти же анимации: последний фрагмент анимированный "выход", сдвинув его из право на центр (после чего он исчезает, поскольку он удалены). Старый фрагмент выскочил от стека и анимированные из центр влево... прямо с экран.