2016-03-11 111 views
0

我有一个共享的元素添加转场的片段,像这样错误片段

currentFragment.setEnterTransition(TransitionInflater.from(context).inflateTransition(android.R.transition.fade)); 
    currentFragment.setExitTransition(TransitionInflater.from(context).inflateTransition(android.R.transition.fade)); 
    Transition transition = TransitionInflater.from(context).inflateTransition(android.R.transition.slide_right); 
    transition.setDuration(context.getResources().getInteger(R.integer.fragment_transition_duration)); 

然后

targetFragment.setSharedElementEnterTransition(TransitionInflater.from(context).inflateTransition(R.transition.change_image_transform)); 
    targetFragment.setEnterTransition(TransitionInflater.from(context).inflateTransition(android.R.transition.fade)); 
    targetFragment.setReturnTransition(transition); 

我看到的问题是,一旦我浏览到如果我点击后退按钮 - 重复和非常快地调用默认的onBackPressed(),则活动会将错误的片段显示为可见。当我点击屏幕时,点击事件转到正确的片段(可能在可见片段下面),但我看不到正确的片段。

如果我更慢点击后退按钮,我会得到正确的行为。有没有人遇到过这样的情景?

编辑:这是什么FragmentActivity做

/** 
* Take care of popping the fragment back stack or finishing the activity 
* as appropriate. 
*/ 
public void onBackPressed() { 
    if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) { 
     supportFinishAfterTransition(); 
    } 
} 

另一件事提的是,当我删除返回变换我没有这个问题。

回答

0

好的,我找到了答案,如果任何人有兴趣。我不知道这是为什么起作用,但它似乎解决了我的问题。

如果你有一个设置了返回转换的片段,那么在你的onDestroyView()中调用方法setReturningTransition(null)。