gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:46 29 4
gpt4 key购买 nike

我实现的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com