1. 程式人生 > >Android-ViewPager中呼叫notifyDataSetChanged失效問題--setItemPosition--POSITION_NONE

Android-ViewPager中呼叫notifyDataSetChanged失效問題--setItemPosition--POSITION_NONE

最基本的方法:

針對於child view比較簡單的情況(例如僅有TextView、ImageView等,沒有ListView等展示資料的情況),可以在自己的Adapter中加入程式碼:
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
這樣既可達到一般情況下要求的效果。

存在的問題:

這不是PagerAdapter中的Bug,通常情況下,呼叫 notifyDataSetChanged方法會讓ViewPager通過Adapter的getItemPosition方法查詢一遍所有child view,這種情況下,所有child view位置均為POSITION_NONE,表示所有的child view都不存在,ViewPager會呼叫destroyItem方法銷燬,並且重新生成,加大系統開銷,並在一些複雜情況下導致邏輯問題。特別是對於 只是希望更新child view內容的時候,造成了完全不必要的開銷。

更有效地方法:

更為靠譜的方法是因地制宜,根據自己的需求來實現notifyDataSetChanged的功能,比如,在僅需要對某個View內容進行更新時,在instantiateItem()時,用View.setTag方法加入標誌,在需要更新資訊時,通過findViewWithTag的方法找到對應的View進行更新即可。