gpt4 book ai didi

android - getFragments 方法在使用替换事务时只返回 1 个 fragment ,用于返回所有

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:12 25 4
gpt4 key购买 nike

从 SDK 26.0.0-beta1 及更高版本开始,使用 getFragments https://developer.android.com/reference/android/support/v4/app/FragmentManager.html#getFragments()方法返回一个只有 1 个 fragment 的列表,并且列表的大小也始终为 1(因此这排除了任何可能误导我的空条目),当使用 replace 时。 fragment 导航方法。

请记住我使用的是 getSupportFragmentManager , 不是 getFragmentManager

在此 SDK 版本之前,所有 fragment 交易均使用 replace 完成将列在 getFragments 中方法。这意味着如果我替换 10 个 fragment ,那么 getFragments将返回包含所有这 10 个 fragment 的列表。

但是,从 SDK 26.0.0-beta1 - 特别是 - 及更高版本(26.0.0-alpha1 及以下版本没有此问题)开始,该方法始终返回大小为 1 的列表,其中仅包含被替换的最后一个 fragment 。

为了避免这个问题,我开始使用 add并隐藏以前可见的 fragment ,到目前为止,这对我想要的是有效的,即检查哪个是 getFragments 中的第一个 fragment 。每当我需要时列出,并查看某个 fragment 的实例是否已经在该列表中。

现在当我尝试使用共享元素转换时出现了一个新问题,它只适用于 replace (据我的 google fu 允许我找到)意味着如果我想使用共享元素转换我必须返回使用 replace fragment 而不是 add , 但我会再次回到最初的问题。

所以现在我陷入了这种困境,希望有人能解决这个问题:

  • 有什么办法可以解决这个问题吗?
  • getFragments假设我们只使用 replace 时只返回 1 个 fragment 方法还是此行为是尚未修复的未记录错误?
  • 是否可以在不使用 replace 的情况下在 fragment 之间进行共享元素转换? ?

最佳答案

我知道这是一篇旧帖子,你现在可能已经解决了,但这是我在谷歌搜索相同问题时发现的第一件事,所以希望这对某人有帮助(当我在几个月的时间)。

如果您调用 fragmentManager.getBackStackEntryCount() ,您应该获得后台堆栈中所有 fragment 的计数。假设您在添加/替换 fragment 时为 fragment 分配了一个标签,然后将它们添加到后台堆栈,然后您可以在后台获取 fragment 的标签并使用 fragmentManager.findFragmentByTag() 获取其实例。

在 fragment 添加/替换期间设置标签:

transaction.replace(R.id.fragment_container, newFragment, fragmentName)
transaction.add(R.id.fragment_container, newFragment, fragmentName)

并将其添加到后台:

transaction.addToBackStack(fragmentName);

然后循环遍历您的后台堆栈以查找特定 fragment :

final FragmentManager fragmentManager = getSupportFragmentManager();
for (int i = fragmentManager.getBackStackEntryCount() - 1; i >= 0; i--)
{
Fragment fragment = fragmentManager.findFragmentByTag(fragmentManager.getBackStackEntryAt(i).getName());
// ...
}

我正在反向遍历 fragment ,因此我添加的最后一个 fragment 将首先返回。

关于android - getFragments 方法在使用替换事务时只返回 1 个 fragment ,用于返回所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827703/

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