gpt4 book ai didi

java - 替换 fragment 后 ViewPager 不刷新

转载 作者:行者123 更新时间:2023-11-29 08:42:53 25 4
gpt4 key购买 nike

我有一个可以在我的导航栏中打开的 fragment 列表:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment).commit();

fragment 都来自同一类型 -> CDMBasicMovieFragment extends Fragment

在这个 fragment 中,我有一个 viewpager,我用 getFragmentManager() 调用它。在这里我有问题。第一个 fragment 很好,但替换第一个 fragment 后,viewpager 为空。然后我将 getFragmentManager() 更改为 getChildFragmentManager()。现在所有 fragment 都很好。但只有1次。替换回第一个 fragment 后,我遇到了同样的问题。我做错了什么?

编辑1:

我的 View 层次结构:

  • Activity

    • CDMBasicMovieFragment 1
      • ViewPager
        • CDMMovieListFragment
    • CDMBasicMovieFragment 2
      • ViewPager
        • CDMMovieListFragment
    • CDMBasicMovieFragment 3
      • ViewPager
        • CDMMovieListFragment

编辑2:

我试图为 fragment 创建唯一的 ID 并在替换时使用它们,但我已经遇到了同样的问题:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment, uniqueFragmentTag).commit();

编辑3:

我找到了一个可能的解决方案: OnCreateView called multiple times / Working with ActionBar and Fragments我尝试了此链接中的所有内容。我已经遇到同样的问题...有人可以帮忙吗?

更新:

经过大量调试后 ;) 我发现了这个:

当加载第一个 CDMMovieListFragment 时,调用 FragmentPagerAdapter 的 instantiateItem 并检查是否已经有 fragment 。这不是它在内部调用

的原因

mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));

当我替换包含 fragmentpageradapter 的 CDMBasicMovieFragment(里面是添加的 CDMMovieListFragment)并尝试加载第二个 CDMBasicMovieFragment 然后它仍然同一个 fragment 管理器。

FragmentPagerAdapter 的 instantiateItem 被调用并找到了旧的 CDMMovieListFragment。现在它改为调用 mCurTransaction.attach(fragment);。我认为这就是问题所在。但是我很困惑...

最佳答案

我解决了我的问题。

现在我总是像这样替换 CDMBasicMovieFragment:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, CDMBasicMovieFragment.newInstance()).commit();

在调用 FragmentPagerAdapter 的构造函数时,我将 getFragmentManager 更改为 getChildFragmentManager

我想我可以一次创建所有 fragment ,如果我单击导航栏(绘制器)的项目,只需替换它们。但是 replace 将删除一次创建的 fragment ,当我想再次替换删除的 fragment 时,它不在那里。这就是为什么我得到一个空的 viewpager。

关于java - 替换 fragment 后 ViewPager 不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884823/

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