android - 与 getChildFragmentManager() 的共享转换不起作用但与 getFragmentManager() 一起工作

标签 android android-fragments animation

我实现的 fragment 如下:

  1. 保存父 fragment 的 Activity 。使用 getSupportFragmentManager() 添加父 fragment 。
  2. 在父 fragment 中,我使用 getChildFragmentManager() 和事务来替换 childFragment。
  3. 在 childFragment 中,我再次调用 childFragment 等等......
  4. 除共享过渡外一切正常。'
  5. 如果我使用 getFragmentManager() 而不是 getChildFragmentManager() 则存在共享转换,但没有 getChildFragmentManager() 的概念。

代码示例如下所示:

/*This code does not show animation*/
getChildFragmentManager()
                .beginTransaction()
                .addSharedElement(transitionView, ViewCompat.getTransitionName(transitionView))
                .replace(R.id.fragment_container, categoryDetailChildFragment)
                .addToBackStack(TAG)
                .commit();

显示动画的代码是:

  getFragmentManager()
                .beginTransaction()
                .addSharedElement(transitionView, ViewCompat.getTransitionName(transitionView))
                .replace(R.id.fragment_container, categoryDetailChildFragment)
                .addToBackStack(TAG)
                .commit();

为什么在getChildFragmentManager()的时候没有shared transition?请帮助任何人。

最佳答案

每个 fragment 都有自己的childFragmentManager。因此,如果您有多个嵌套的 fragment ,您应该引用同一个 fragment 的 childFragmentManager,您在其中使用 addSharedElement()。

因此如果你有:

ActivityA
|_ FragmentB
   |_ FragmentC
      |_ FragmentD

在这种情况下,对于 fragment C 和 fragment D,您应该使用最高公共(public) fragment 的 getChildFragmentManager() - fragment B,以确保每个嵌套 fragment 都引用相同的 fragment 管理器。这就是为什么当您使用 Activity 的 fragmentManager 时它起作用的原因,因为只有一个 Activity,并且每个 Activity 都通过使用 getActivity() 引用同一个

要在嵌套 fragment 中获取父 fragment ,您可以在嵌套 fragment 的 onAttach() 方法上使用 getParentFragment() 。您也可以将它转换到某个类,例如 FragmentB:

override fun onAttach(context: Context) {
    super.onAttach(context)

    val fragment: FragmentB = parentFragment.parentFragment.parentFragment... as FragmentB
}

关于android - 与 getChildFragmentManager() 的共享转换不起作用但与 getFragmentManager() 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005665/

相关文章:

android - slider 菜单 fragment 中的可交换选项卡

java - 如何在 Kotlin 中使用片段内的按钮进行 Android 开发?

java - 如何制作互动动画?

Android:错误找不到符号 NotificationCompat.DecoratedMediaCustomViewStyle

android - ActionBar AppCompat 更改 Tab 指示器颜色

android - 如何使 map 在标记上居中单击以显示整个 InfoWindow

java - 更改Android Fragment而不创建新的Fragment

iphone - 在 iOS 上使用动画从右到左调整 View 大小

CSS 动画在 Firefox 和 JSFiddle 中不起作用

android - 在 Android 中使用 ScrollView 的图表