解決Android下ViewPager和PagerAdapter中調用notifyDataSe...

Google在Android 3.0SDK中推出的ViewPager控件很大程度上知足了開發者開發頁面左右移動切換的功能,使用很是方便,參見:http://jameszhao84.iteye.com/blog/1344584。可是使用中發現,在刪除或者修改數據的時候,PagerAdapter沒法像BaseAdapter那樣僅經過notifyDataSetChanged方法通知刷新View。 ide


最基本的方法: spa

針對於child view比較簡單的狀況(例如僅有TextView、ImageView等,沒有ListView等展現數據的狀況),能夠在本身的Adapter中加入代碼: blog

 

Java代碼  收藏代碼
  1. @Override  
  2. public int getItemPosition(Object object) {  
  3.     return POSITION_NONE;  
  4. }  
 

這樣既可達到通常狀況下要求的效果。 開發


存在的問題: get

這不是PagerAdapter中的Bug,一般狀況下,調用 notifyDataSetChanged方法會讓ViewPager經過Adapter的getItemPosition方法查詢一遍全部child view,這種狀況下,全部child view位置均爲POSITION_NONE,表示全部的child view都不存在,ViewPager會調用destroyItem方法銷燬,而且從新生成,加大系統開銷,並在一些複雜狀況下致使邏輯問題。特別是對於 只是但願更新child view內容的時候,形成了徹底沒必要要的開銷。 it


更有效地方法: io

更爲靠譜的方法是因地制宜,根據本身的需求來實現notifyDataSetChanged的功能,好比,在僅須要對某個View內容進行更新時,在instantiateItem()時,用View.setTag方法加入標誌,在須要更新信息時,經過findViewWithTag的方法找到對應的View進行更新便可。 object

相關文章
相關標籤/搜索