2012-10-08 96 views
15

我正在开发一个横向滚动表的ViewPager应用程序,有时我需要更改适配器以加载一组不同的表。 我试着做到以下几点:android viewpager更改适配器

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

但它总是刷新之前的数据。难道不能更改ViewPager的适配器吗?

回答

2

您需要在寻呼机适配器中覆盖public int getItemPosition (Object object)。对于viewpager中的每个元素,您需要返回POSITION_UNCHANGED(如果它仍在寻呼机中)或POSITION_NONE(如果它已被删除)。否则视图寻呼机将不知道有什么改变。我不建议设置一个新的适配器,只是清除旧的数据。

28

酷似我的APP做...

对于变化ViewPagerAdapter,我所做的是:

  1. 清除当前的转接器内的所有片段
  2. 设置电流适配器为null
  3. 分配ViewPager的新adidate

    /* 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); 
    

希望它帮助〜

+3

我试过你的解决方案。它工作完美无任何问题。非常感谢 –

+0

在API 18中,我无法'setAdapter(null)'。但其他一切工作。谢谢。 – ffleandro

+0

工作完美!韩国社交协会! – JannGabriel

-4

添加此功能查看传呼机重装了下一个片段:

viewPager.setCurrentItem() 
-1

我发现了一个很简单的选择,我不知道这是否是对还是错,但你可以刚刚重新设置适配器

mViewPager.setAdapter(mSectionsPagerAdapter); 

它例如,对于谷歌示例项目分页活动的按钮FloatingActionButton

相关问题