最近在开发中,发现ViewPager里集成Fragment,但是执行notifyDataSetChanged之后无刷新,在不同位置的日志表明,数据没有出现问题,于是便怀疑问题是出在控件本身,或者使用问题。
一番查找,发现在pager刷新的时候并没有清除的原来的视图,也没有更新,一番查找之后发现
public int getItemPosition(Object object) {
return POSITION_NONE;
}
可以使用这种方式进行解决,但是其原理是清除所有View重新进行加载,效率较低
可以在实例化每一条item的时候设置setTag(); 设置一个tag
之后再更新的时候使用findViewWithTag来查找你要更新的视图,不要用findViewById因为ById会遍历你所有的id节点,效率非常之低,通过观察AS monitors窗口,你会发现每次执行findViewById的时候,cpu的使用会激增(控件id多的情况下),所以不建议用这种方式,tag可以用这一条item数据中的唯一标识,例如ID等。
学习记录,顺便分享,希望能帮助小白们,附上原文链接,英语好的可以看看
https://stackoverflow.com/questions/7263291/viewpager-pageradapter-not-updating-the-view/8024557#8024557