共享转换片段到片段不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共享转换片段到片段不起作用相关的知识,希望对你有一定的参考价值。

我有一个视图寻呼机有三个片段的活动。我开始了另一个顶级片段,其中包含内部片段的视图寻呼机一切都很好,我成功地做到了这一切。但是当我使用addSharedElement进行从片段到片段的共享转换时,根本就没有动画发生。我用下面的新顶部片段替换片段:

   View transitionView = view.findViewById(R.id.photo_image_view);
        fragmentManager
                .beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .addToBackStack(null)
                .addSharedElement(transitionView, ViewCompat.getTransitionName(transitionView))
                .commit();

在我的下一个片段onCreate我做了:

   public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getActivity() != null) {
        getActivity().supportPostponeEnterTransition();
    }
   }

然后在onCreateView中我实现了另一个带有fragment的viewpager。在实现了view pager之后,我想要显示的片段我做了:

     desiredFragmentToShow.setSharedElementEnterTransition(TransitionInflater.from(

     getActivity()).inflateTransition(R.transition.change_image_trans));

     desiredFragmentToShow.setEnterTransition(TransitionInflater.from(

     getActivity()).inflateTransition(android.R.transition.fade));

在onViewCreated的desiredFragmentToShow中我做了:

    activity.supportStartPostponedEnterTransition();

但根本没有动画。如果有任何机构有想法,请帮忙。

答案

对不起,我的回答是在kotlin,但我相信这没什么大不了的

我发现在startPostponedEnterTransition()中调用onViewCreated为时已晚。

ViewPager片段

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val transition = TransitionInflater
        .from(context)
        .inflateTransition(R.transition.change_image_trans)
    sharedElementEnterTransition = transition
    /* The return transition probably should be set here as well on the way back
       but I havent't try that yet so I nullify it... */
    sharedElementReturnTransition = null
    postponeEnterTransition()
    // ... your code
}

页面片段

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    startPostponedEnterTransition()
}

这工作......

不幸的是,如果你想在转换上放置一个监听器,只有在ViewPager中定义它才有效,因为在Page Fragment中,如果你在转换的共享转换上设置监听器,它就不会触发。

val transition = parentFragment!!.sharedElementEnterTransition

以上是关于共享转换片段到片段不起作用的主要内容,如果未能解决你的问题,请参考以下文章

共享元素片段转换不起作用

共享项目转换在背面的片段中不起作用

FragmentNavigator 共享过渡不起作用

共享元素返回过渡不适用于片段中的 recyclerview 和 cardview

从父片段到选项卡片段的接口侦听器不起作用

添加到片段时按钮不起作用