有关Viewpager 在pageAdapter中调用notifyDataSetChanged失效的问题
2014-03-26 15:06
281 查看
遇见这个问题的时候 我开始并没有想到是viewpager的特殊导致的 可经过搜索以后发现有很多朋友遇到这个问题
大部分解决的办法是重写pageAdapter里的这个方法
这里找到个资料是从源码分析为什么notifyDataSetChanged() 不能刷新的原因
http://rincliu.com/blog/2013/09/29/viewpager/
有个博主说到
这不是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进行更新即可。
根据这个思路我确实解决了问题
在instantiateItem中加上setTag()
在需要刷新的地方加上findViewWithTag()
这样就搞定了 至少我这里的页面是可以刷新了
大部分解决的办法是重写pageAdapter里的这个方法
这里找到个资料是从源码分析为什么notifyDataSetChanged() 不能刷新的原因
http://rincliu.com/blog/2013/09/29/viewpager/
@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进行更新即可。
根据这个思路我确实解决了问题
在instantiateItem中加上setTag()
final ViewHolder viewHolder = new ViewHolder(); final View views = context.getLayoutInflater().inflate(R.layout.viewpager_item, null); views.setTag(viewHolder);//加上这句 viewHolder.list = (ListView) views.findViewById(R.id.list); viewHolder.add = (Button) views.findViewById(R.id.add);
以下代码略
在需要刷新的地方加上findViewWithTag()
views.findViewWithTag(viewHolder); notifyDataSetChanged();
这样就搞定了 至少我这里的页面是可以刷新了
相关文章推荐
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- (4.3.1.18)解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题(转)
- 解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题
- ViewPager调用Adapter.notifyDataSetChanged()失效
- Viewpager动态添加删除Fragment ,viewPageadapter.notifyDataSetChanged()方法不管用问题
- Android-ViewPager中调用notifyDataSetChanged失效问题--setItemPosition--POSITION_NONE
- ActionBar+TabPageIndicator+ViewPager+FragmentPagerAdapter的Tab主界面
- ViewPager和PageAdapter,FragmentPageAdapter,FragmentStatePageFragment
- 详解ViewPager调用FragmentPagerAdapter.notifyDataSetChanged()不能更新Fragment
- 在textFieldShouldEndEditing 方法中调用[self.tableView reloadData] 失效问题
- 解决ViewPager在ScrollView中失效的问题
- 完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题
- 解决ViewPager+fragment预加载问题(getItem()两次调用)
- ViewPager适配器学习记要( pageAdapter和FragmentPagerAdapter/FragmentStatePagerAdapter))
- 在Viewpager的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题