首页 文章

android viewpager更改适配器

提问于
浏览
15

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

mViewPager.setAdapter(new pagerAdapterPushed(getSupportFragmentManager()));
mViewPager.getAdapter().notifyDataSetChanged();
indicator.setViewPager(mViewPager);
indicator.invalidate();
mViewPager.invalidate();

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

5 回答

  • 30

    完全像我的APP做...

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

    • 清除当前适配器内的所有片段

    • 将当前适配器设置为null

    • 为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);
    

    希望它有所帮助〜

  • 2

    我看到@RRTW的方式适用于某些人,但它并没有为我做的伎俩(虽然它很接近) . 没有'commitNow()'而不是常规'commit()'它将无法正常工作 . 我做了类似的事情:

    private fun changePagerAdapter(newAdapter: PagerAdapter) {
        val transaction = supportFragmentManager.beginTransaction()
        supportFragmentManager.fragments.forEach {
            transaction.remove(it)
        }
        transaction.commitNow()
        view_pager.adapter = newAdapter
    }
    
  • -4

    我找到了一个非常简单的选项,我不知道它是对还是错,但你可以重新设置适配器

    mViewPager.setAdapter(mSectionsPagerAdapter);
    

    这是按钮FloatingActionButton的谷歌示例项目选项卡式活动的示例

  • -2

    您需要在寻呼机适配器中覆盖 public int getItemPosition (Object object) . 对于viewpager中的每个元素,您需要返回 POSITION_UNCHANGED (如果它仍在寻呼机中)或 POSITION_NONE (如果它已被删除) . 否则,查看寻呼机赢得't know something has changed. I wouldn' t建议设置新适配器,只清除旧适配器中的数据 .

  • 0

    添加此内容以查看寻呼机以重新加载下一个片段:

    viewPager.setCurrentItem()
    

相关问题