详见 http://www.jianshu.com/p/29b708c62b33
背景
最近在填前同事的一个坑时,不小心遇到另外一个坑。 在一个礼物面板,原实现是gridView + ViewPager实现的(有几页礼物),在送用户免费礼物时,刷新ViewPager里面的item时,出现了闪屏。
其实很多童鞋知道,PagerAdapter在调用notifyDataSetChanged(), 如果使用默认的会不起作用
点进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();
}
可以看到
- mViewPagerObserver 是怎么传进来的呢?该类实际实现类是啥?
搜索全类只有一处赋值
void setViewPagerObserver(DataSetObserver observer) {
synchronized (this) {
mViewPagerObserver = observer;
}
}
image.png
可以看出是PagerObserver类,有ViewPager类初始化setAdapter(PagerAdapter adapter)的时候传过来。
回到刚才的 mViewPagerObserver.onChanged();PagerObserver的实现如下

在Android中,当使用PagerAdapter并调用notifyDataSetChanged()时,可能会遇到闪屏问题。这是因为PagerAdapter默认不会处理某些更新。文章详细分析了ViewPager的内部工作原理,特别是PagerObserver和PagerAdapter的交互。解决方法包括正确实现getItemPosition()以及使用SparseArray手动刷新避免删除整个item导致的闪屏现象。

1906

被折叠的 条评论
为什么被折叠?



