android viewpager更改适配器

Ste*_*Ste 16 android adapter android-viewpager

我正在使用ViewPager开发一个用于横向滚动表的应用程序,有时我需要更改适配器以加载一组不同的表.我试过做以下事情:

mViewPager.setAdapter(new pagerAdapterPushed(getSupportFragmentManager()));
mViewPager.getAdapter().notifyDataSetChanged();
indicator.setViewPager(mViewPager);
indicator.invalidate();
mViewPager.invalidate();
Run Code Online (Sandbox Code Playgroud)

但它总是重新加载以前的数据.是不是可以更改ViewPager的适配器?

RRT*_*RTW 32

完全像我的APP做...

对于更改ViewPagerAdapter,我所做的是:

  1. 清除当前适配器内的所有片段
  2. 将当前适配器设置为null
  3. 为ViewPager分配新的adpater

    /* Clear all Fragments inside current adapter */
    public class MyPagerAdapter extends FragmentPagerAdapter
    {
      private ArrayList<Fragment> fragments=new ArrayList<Fragment>();
      //...some stuff
    
      public void clearAll() //Clear all page
      {
        for(int i=0; i<fragments.size(); i++)
        fragMan.beginTransaction().remove(fragments.get(i)).commit();
        fragments.clear();
      }
    }
    
    /* Set current adapter to null */
    Constants.VP.removeAllViews();
    Constants.VP.setAdapter(null);
    
    /* Assign new adpater for ViewPager */
    Constants.PAGER=new MyewPagerAdapter(getSupportFragmentManager());
    Constants.VP.setAdapter(Constants.PAGER);
    
    Run Code Online (Sandbox Code Playgroud)

希望它有所帮助〜

  • 出于某种原因,在我将它从FragmentPagerAdapter更改为FragmentStatePagerAdapter之后,这只适用于我 (6认同)
  • 我试过你的解决方案.它完美无缺.非常感谢 (3认同)

mar*_*ski 3

您需要public int getItemPosition (Object object)在寻呼机适配器中覆盖。对于视图分页器中的每个元素,您需要返回POSITION_UNCHANGED(如果它仍在分页器中)或POSITION_NONE(如果它已被删除)。否则,视图寻呼机将不会知道某些内容已发生更改。我不建议设置新适配器,只需清除旧适配器中的数据即可。