Android-ViewPager中呼叫notifyDataSetChanged失效問題--setItemPosition--POSITION_NONE
阿新 • • 發佈:2019-02-01
最基本的方法:
針對於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進行更新即可。