解决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

相关文章
相关标签/搜索