ViewPager倒序並分頁功能的顯示

    最近須要作一個功能,就是用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--;
                    }
                }
            }
        }
相關文章
相關標籤/搜索