
在A(yíng)dapter中重寫(xiě)getItemPosition方法,這么做的原因google一下應(yīng)該都能找到蠻多的解釋的,在這邊也簡(jiǎn)單的理解一下,當(dāng)數(shù)據(jù)改變時(shí)想要?jiǎng)討B(tài)的更新ViewPager的顯示時(shí),如果有用過(guò)BaseAdapter重寫(xiě)過(guò)的一般都知道可以直接調(diào)用adapter.notifyDataSetChanged()來(lái)動(dòng)態(tài)的更新數(shù)據(jù)的顯示;但是在這里調(diào)用notifyDataSetChanged卻發(fā)現(xiàn)ViewPager并沒(méi)有進(jìn)行相應(yīng)的數(shù)據(jù)更新(具體原因是什么現(xiàn)在還不是很理解,可以的話(huà)有空查看一下源代碼);重寫(xiě)getItemPosition讓它返回POSITOIN_NONE;這樣做的目的是notifyDataSetChanged時(shí)返回空,這樣就會(huì)從數(shù)據(jù)重新填充,再外部更新數(shù)據(jù)然后調(diào)用notifyDataSetChanged更新就達(dá)到了目的了。 具體的Adapter代碼如下:public classImageScanAdapater extends PagerAdapter{
private List mListViews;
public ImageScanAdapater(Listlists){
this.mListViews = lists;
}
@Override
public int getCount() {
return mListViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ImageViewTouchViewPager)container).removeView((View)object);
}
@Override
public ObjectinstantiateItem(View container, intposition) {
((ImageViewTouchViewPager)container).addView(mListViews.get(position), 0);
return mListViews.get(position);
}
@Override
public Parcelable saveState(){
return null;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
然后外部就可以想BaseAdapter一樣更新數(shù)據(jù)了,但是google出來(lái)的說(shuō)這樣對(duì)內(nèi)存的開(kāi)銷(xiāo)比較浪費(fèi);不過(guò)想一下也明白了,每次更新都要重新填充一遍,所以浪費(fèi)是必須,但現(xiàn)在也等著用浪費(fèi)就浪費(fèi)吧,
最后如果簡(jiǎn)單的更新View的顯示,可以設(shè)置Tag,通過(guò)findViewByTag來(lái)更新,不用這么浪費(fèi)的。
以后可能再深入。
愛(ài)華網(wǎng)本文地址 » http://www.klfzs.com/a/25101017/328818.html
愛(ài)華網(wǎng)



