【问题标题】:How to clear view pager fragments如何清除视图寻呼机片段
【发布时间】:2015-07-09 13:34:42
【问题描述】:

我有一个fragment A,其中我有一个带有两个fragment 1.1fragment 1.2 的视图寻呼机 这些片段是fragment A 的子片段。

现在,当用户到达 Fragment B 然后又回到 A 时,我需要更新 通过片段 B 中的选项,子片段 1.1 和 1.2。 问题是我无法更新片段,因为它们已经在子片段管理器中,当我返回未调用视图寻呼机的片段 A getItem(int position) 时也是如此。 在设置视图寻呼机适配器之前,我设法删除了所有子片段,但我不确定这是完成此功能的正确方法。

我在 Fragment A 中有 1.1 和 1.2 引用

谢谢。

【问题讨论】:

    标签: android android-viewpager fragment


    【解决方案1】:

    遇到了同样的问题。对我来说,它可以覆盖 FragmentStatePagerAdapter

    @Override
    public Parcelable saveState() {
        return null;
    }
    
    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    
    }
    

    这对我有用。

    【讨论】:

      【解决方案2】:

      一个简单的方法(不是最好的方法)是在你的PagerAdapter 中覆盖getItemPosition()

      public int getItemPosition(Object object) {
          return POSITION_NONE;
      }
      

      当适配器的notifyDataSetChanged() 方法被调用时,ViewPager 将在它已经知道的视图上调用getItemPosition()。通过返回 POSITION_NONE,您是在告诉 ViewPager 删除视图。一旦ViewPager 删除视图,它将调用getItem() 来获取更新的视图。

      所以当用户返回到 Fragment A 时,你会调用:

      viewPager.getAdapter().notifyDataSetChanged();
      

      这将开始更新所有视图的过程。

      【讨论】:

      • 嗨 Kris,感谢您的回复,但是当我从片段 B 回到 A 时,我正在再次构建适配器。
      • 我创建了一个函数 public void setData(List data) { _fragData = data; notifyDataSetChanged();我在将适配器设置为 viewpager 后调用了它,但仍然没有效果
      • 这是更好的方法。请注意,为PagerAdapter 调用notifyDataSetChanged() 意味着页面已更改位置;它与AdapterVIew 适配器的不同之处在于它不处理项目本身的更改。在您的setData() 中,您可以尝试在片段上调用getView().invalidate() 以使用您的数据刷新视图。请务必检查getView() 不为空,因为它会在片段未呈现时出现。
      • 问题是我在 setData 中调用 notifyDataSetChanged() 后 getItem(int position) 从未调用,我添加了 getItemPosition 但没有运气
      • 如果您在setData() 末尾调用getView().invalidate() 会发生什么?
      【解决方案3】:

      你应该使用 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter!!!

      【讨论】:

        【解决方案4】:

        你可以打电话:

        viewPager.removeAllViews()
        viewPagerAdapter.notifyDataSetChanged()
        

        【讨论】:

        • 感谢您的帮助,您可以添加解释吗?此代码将如何解决问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多