詳解Android App中ViewPager使用PagerAdapter的方法
PageAdapter是一個抽象類,直接繼承于Object,導(dǎo)入包android.support.v4.view.PagerAdapter即可使用。
要使用PagerAdapter,
首先要繼承PagerAdapter類,至少覆蓋以下方法:
在每次創(chuàng)建ViewPager或滑動過程中,以下四個方法都會被調(diào)用,而instantiateItem和destroyItem中的方法要自己去實(shí)現(xiàn)。
public abstract int getCount();
這個方法,是獲取當(dāng)前窗體界面數(shù)
public abstract boolean isViewFromObject(android.view.View arg0, java.lang.Object arg1);
這個方法用于判斷是否由對象生成界面
public java.lang.Object instantiateItem(android.view.View container, int position);
這個方法,return一個對象,這個對象表明了PagerAdapter適配器選擇哪個對象放在當(dāng)前的ViewPager中
public void destroyItem(android.view.ViewGroup container, int position, java.lang.Object object);
這個方法,是從ViewGroup中移出當(dāng)前View
public class ViewPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public void destroyItem(View container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
return super.instantiateItem(container, position);
}
}
ViewPager的PagerAdapter不可以更新數(shù)據(jù)問題的解決
在做項(xiàng)目的時候,發(fā)現(xiàn)即使調(diào)用了
galleryAdapter.notifyDataSetChanged();
但是ViewPager還是不會更新原來的數(shù)據(jù)。
后來在stackoverflow上面找到了方法,原文鏈接:
http://stackoverflow.com/questions/7263291/viewpager-pageradapter-not-updating-the-view
于是花了一點(diǎn)時間,修改了代碼:
protected PagerAdapter galleryAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View)arg1);
}
@Override
public int getCount() {
return size;
}
@Override
public Object instantiateItem(View container, int position) {
return bindGalleryAdapterItemView(container, position);
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
};
@Override
public void finishUpdate(View arg0) {}
@Override
public void restoreState(android.os.Parcelable state, ClassLoader loader) {
};
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
};
注意:POSITION_NONE 是一個PagerAdapter的內(nèi)部常量,值是-2,
API里面有說明:
int android.support.v4.view.PagerAdapter.POSITION_NONE = -2 [0xfffffffe]
可以更新數(shù)據(jù)了。嘿嘿。
- android開發(fā)中ListView與Adapter使用要點(diǎn)介紹
- Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法
- Android自定義Spinner下拉列表(使用ArrayAdapter和自定義Adapter實(shí)現(xiàn))
- Android listview與adapter詳解及實(shí)例代碼
- Android開發(fā)中ListView自定義adapter的封裝
- Android中的Adapter簡單介紹
- Android Adapter的幾個常用方法
- Android中GridView和ArrayAdapter用法實(shí)例分析
- Kotlin編寫Android適配器Adapter
- Android ListView適配器(Adapter)優(yōu)化方法詳解
- Android開發(fā)中總結(jié)的Adapter工具類【附完整源碼下載】
相關(guān)文章
Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法
這篇文章主要為大家詳細(xì)介紹了Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
詳談OnTouchListener與OnGestureListener的區(qū)別
下面小編就為大家?guī)硪黄斦凮nTouchListener與OnGestureListener的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Android中App字體大小不隨系統(tǒng)改變而改變
這篇文章主要介紹了Android中App字體大小不隨系統(tǒng)改變而改變,需要的朋友可以參考下2017-04-04
Android編程實(shí)現(xiàn)實(shí)時監(jiān)聽EditText文本輸入的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)實(shí)時監(jiān)聽EditText文本輸入的方法,結(jié)合實(shí)例形式分析了EditText控件及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Android GridView實(shí)現(xiàn)橫向列表水平滾動
這篇文章主要為大家詳細(xì)介紹了Android GridView實(shí)現(xiàn)橫向列表水平滾動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android?PowerManagerService?打開省電模式
這篇文章主要介紹了Android?PowerManagerService打開省電模式,文章通告省電模式的打開過程、什么是?battery?saver?sticky?模式兩部分展開詳情,感興趣的朋友可以參考一下2022-08-08
Android自定義ViewFlipper實(shí)現(xiàn)滾動效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewFlipper實(shí)現(xiàn)滾動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08

