【问题标题】:Reload fragments in ViewPager [duplicate]在 ViewPager 中重新加载片段 [重复]
【发布时间】:2018-07-03 06:54:29
【问题描述】:

我有ViewPagerfragments。适配器从覆盖方法getItem ()获取片段。

@Override
   public Fragment getItem(int position) {
   return new MyFragment();
}

我需要ViewPager 在某个事件(例如按下按钮)时重新加载其所有fragments。 IE。所有片段(甚至是现在打开的片段及其邻居)都已更新。这如何实现?

【问题讨论】:

    标签: java android android-fragments android-viewpager


    【解决方案1】:

    在适配器中覆盖getItemPosition,如下所示:

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

    然后调用adapter.notifyDataSetChanged()ViewPager 将删除所有视图并重新加载它们。

    【讨论】:

      【解决方案2】:

      你可以像这样调用ViewPager重新设置适配器,

      yourViewPager.setAdapter(yourAdapter);
      

      但问题是它会跳转到第一个元素位置(即跳转到ViewPager 中的第一个Fragment)。为避免这种情况,您可以使用Listener 来监听ViewPager 的当前项目(当前片段)并将当前位置存储在变量中。现在我们可以使用这个变量来设置刷新后ViewPager的当前项。像这样的,

      yourViewPager.setAdapter(yourAdapter);
      yourViewPager.setCurrentItem(currentPosition);
      

      如果我的理解有误,请纠正我。

      【讨论】:

      • 当我尝试调用 .setAdapter(Adapter) 时出现错误 java.lang.IllegalArgumentException:No view found for id 0x7f0903cb。我该如何解决?
      • @Anasteisha 请尝试通过调用 yourViewPager.setId(R.id.view_pager) 为“ViewPager”设置 id;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多