返回转换后显示错误的片段

时间:2016-03-11 18:57:09

标签: android android-fragments

我添加了一个像这样的共享元素转换的片段

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() - 反复且非常快, activity将错误的片段显示为可见。当我点击屏幕时,点击事件会转到正确的片段(可能在可见片段下方),但我看不到正确的片段。

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

编辑:这就是FragmentActivity正在做的事情

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

另外要提到的是,当我删除Return Transition时,我没有这个问题。

1 个答案:

答案 0 :(得分:0)

好的,如果有人有兴趣,我找到了答案。我不知道为什么会这样,但它似乎解决了我的问题。

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