最近須要作一個功能,就是用ViewPager顯示每一天的數據。java
可是初始化的時候:一、顯示最近十條數據 二、默認顯示今天的數據 三、向左滑動顯示昨天、前天及以前的數據。動畫
例現在天是 6.12。那麼顯示的順序以下圖所示:spa
6.3 | 6.4 | 6.5 | 6.6 | 6.7 | 6.8 | 6.9 | 6.10 | 6.11 | 6.12 |
同時,還須要實現分頁,也就是說界面滑動到6.3的時候,須要加載下一頁的數據,可是還須要將數據加載到 6.3的前面.net
下面是具體的邏輯:code
一、數據倒序查詢出來之後,生成對應的View.而後list.add(0,view對象),記得是0對象
二、在OnPageChangeListener的實現類中的onPageSelectedget
方法中,當position爲0 的時候,須要查詢下一頁的數據。it
在查詢數據以前,須要將viewpager中已經存在的view都destroy掉。io
具體的實現代碼以下:table
//將viewpager中已經存在的view都destroy掉 adapter.startUpdate(viewPager); for(int i = 0;i<adapter.getCount();i++){ adapter.destroyItem(viewPager,i,null); } adapter.finishUpdate(viewPager);
destroy後,則須要從新添加數據,代碼以下:
for(;nowCount < allCount;nowCount++){ addView(nowCount+"",0); } adapter.setViews(temp); adapter.notifyDataSetChanged(); // Log.i("test","[結果是]:"+(adapter.getCount()-steps)+"【界面中應該顯示的是】:"+((TextView)temp.get(adapter.getCount()-steps)).getText().toString()); viewPager.setCurrentItem(5,false);
切記:
.setCurrentItem(5,false); 須要不使用滑動動畫,不然會出現空白界面
--其實最最重要的是調用 setCurrentItem 不要使用 動畫效果
demo的下載地址:http://download.csdn.net/detail/u011379195/8800705
最近發現有一個問題,就是 在分頁完成之後,setCurrentItem(10)緊鄰的前面的界面不會顯示出來
具體的解決方案是:在Adapter中getItemPosition方法的返回值設置成POSITION_NONE。即
public int getItemPosition(Object object) { return POSITION_NONE;//if the item is no longer present in the adapter }
還有ViewPager的OnPageChangeListener監聽,須要在onPageScrollStateChanged方法中設置刷新數據:
以下所示:
public void onPageScrollStateChanged(int state) {// 滑動狀態改變 if(ViewPager.SCROLL_STATE_IDLE == state){ if (mUpViewPager.getCurrentItem() == 0) {// 滑動到最後一頁 mUpdatePage++; //從新查詢數據 int count = refreshStepsData(mUpdatePage,true); if(count > 0){ mUpViewPagerAdapter.startUpdate(mUpViewPager); for(int i = 0;i<mUpViewPagerAdapter.getCount();i++){ mUpViewPagerAdapter.destroyItem(mUpViewPager,i,null); } mUpViewPagerAdapter.finishUpdate(mUpViewPager); mUpViewPagerAdapter.setListViews(mUpViewPagerList);// 重構adapter對象 mUpViewPagerAdapter.notifyDataSetChanged();// 刷新 mUpViewPager.setCurrentItem(count,false); }else{ mUpdatePage--; } } } }