最近项目中遇到了一个奇怪的问题:
假设我打开一个鞋子列表页面,我不断往下滑动查看喜欢的鞋子(比如是第20双鞋子,),当我点进去跳转新页面在查看完该鞋子详情之后再关闭就会发现我又回到了第1双鞋子的位置而不是第20双鞋子的位置。
我的项目采用的是ViewPager+Fragment,其他的页面都没有出问题,单单就是这个页面出问题,所以我就研究了这个页面的代码和其他页面代码的不同之处,惊讶发现:
@Override
public void onResume() {
super.onResume();
adapter.notifyDataSetChanged();//罪魁祸首就是他
}
这段代码的意思是每次与此页面需要交互的时候都要刷新数据,当时理解的不深刻
/**
* This method should be called by the application if the data backing this adapter has changed
* and associated views should update.
*/
public void notifyDataSetChanged() {
synchronized (this) {
if (mViewPagerObserver != null) {
mViewPagerObserver.onChanged();
}
}
mObservable.notifyChanged();
}
通过源码我们可以看到关联的视图和数据都会被刷新,这样就解释了为什么关闭子页面的时候不能恢复到之前页面的状态了。