2012-10-08 140 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

相關問題