animation片段和后面的堆栈

我无法使用或理解如何popupFragmentTransactions退后堆栈处理自定义animation。 具体来说,我希望它叫“出”animation,但似乎并不如此。

我有一个简单的方法来处理一个片段事务(FragmentTransaction),我添加一个片段,并应用自定义的过渡,以便它淡入/淡出。 我也将这添加到后退堆栈,以便用户可以使用后退button撤消该事务,实质上导航到添加片段之前的状态。

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(); } 

一切都很顺利,但是当用户点击后退button时,转换animation不会反转。 我期望的是,当片段被删除,它会使用淡出animation。 相反,它似乎popup(没有animation),然后容器似乎淡入。我不知道这正是发生的事情,但片段绝对不是淡出。

我的应用程序使用兼容性库来添加片段支持,但是我认为这也适用于Honeycomb(android-11)。 有谁知道我是否只是在这里做错了什么,或者如果我只是期待太多? 理想的情况下,我想animation的片段类似于(通过Xoom)Gmail如何通过点击一条消息,然后使用后退button向前移动。 最好不必重写后退button的function,并跟上我自己的片段状态,因为我可以有几个“交易”,我想退出,我不是重新发明车轮的粉丝。

另请向Android开发者小组提问: http : //groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

该bug在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); 

当后退button按下时转换工作相反。

这是一个错误,看看错误报告15623 。 其中一位Android项目成员评论说,3.1版本的修复已经太迟了,但是它应该会进入下一个版本。

同一个成员继续说…

问题在于,在popup操作上运行相同的animation,以便将碎片放入当前位置。 例如,在上面的滑动示例中,在向前操作(将旧片段推入堆栈并将新片段移动到视图中)时,我们将旧片段从中心向左滑动,并将新片段从到中心的权利。 当popup堆栈时,将运行相同的animation:最近的片段通过从右向中间滑动(在此之后它会消失,因为它被移除)而被animation化。 旧的碎片从堆栈popup,从中心向左移动…就在屏幕上。