Android fragments 共享元素转换可以用于不同容器中的片段吗?

Android fragments 共享元素转换可以用于不同容器中的片段吗?,android-fragments,android-5.0-lollipop,android-transitions,shared-element-transition,Android Fragments,Android 5.0 Lollipop,Android Transitions,Shared Element Transition,我想在我的Android棒棒糖应用程序中实现共享元素转换。在我阅读了文件、问题和一些帖子之后,我决定试一试,但现在我遇到了一个问题 场景是我有两个片段容器(用于平板电脑),就像普通的列表/细节设计模式一样 我想在触摸列表项时,在列表片段到细节片段之间进行共享元素转换。输入细节片段是可以的,但只要我按下后退按钮,应用程序就会崩溃,转换框架代码中出现NullPointerException 共享元素转换是否支持该场景 以下是启动详细信息片段的代码: FragmentTransaction ft =

我想在我的Android棒棒糖应用程序中实现共享元素转换。在我阅读了文件、问题和一些帖子之后,我决定试一试,但现在我遇到了一个问题

场景是我有两个片段容器(用于平板电脑),就像普通的列表/细节设计模式一样

我想在触摸列表项时,在列表片段到细节片段之间进行共享元素转换。输入细节片段是可以的,但只要我按下后退按钮,应用程序就会崩溃,转换框架代码中出现NullPointerException

共享元素转换是否支持该场景

以下是启动详细信息片段的代码:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = DetailFragment.create((int)id);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    View title = view.findViewById(R.id.item_name);
    title.setTransitionName("title");
    listFragment.setSharedElementReturnTransition(
        TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
    listFragment.setExitTransition(
        TransitionInflater.from(this).inflateTransition(android.R.transition.explode));

    fragment.setSharedElementEnterTransition(
        TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
    fragment.setEnterTransition(
        TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
    ft.addSharedElement(title, "title");
}
else {
    ft.setCustomAnimations(R.anim.slide_in_right, 0, 0, R.anim.slide_out_right);
}
ft.replace(R.id.detail_panel, fragment)
   .addToBackStack(null)
   .commit();
Logcat在这里:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' on a null object reference
        at android.support.v4.app.BackStackRecord.configureTransitions(BackStackRecord.java:1201)
        at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1029)
        at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:883)
        at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1541)
        at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:502)
        at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:176)
        ...

片段转换不支持不同片段容器之间的转换。如果需要,可以使用常规转换获得想要的结果。这就是说,我很惊讶地听到enter转换是正确的。您的代码显示单个容器上的替换。这应该行得通。您是否可能正在替换空片段?如果改为添加(),它是否有效?如果是这样的话,这是一个值得修复的bug。@GeorgeMount,谢谢您提供的信息!是的,我正在替换一个空片段。未选择任何内容时,详细信息容器为空(因此未附加片段)。当从列表容器中选择一个项目时,我试图显示细节片段。add()的结果似乎是相同的。哦,回车转换不完全正常,我的意思是它会运行。实际的转换并不像预期的那样完全,但我认为这是transitionName的事情。现在我想我对整个过渡有了更好的理解。再次感谢你!