Android开发之ViewPager使用遇到的坑(持续更新)
目录
- 更多分享:http://www.catbro.cn
一、前言
- ViewPager是一个Android组件中使用频率比较高的组建,在Android开发过程中,我们在使用ViewPager时需要注意些什么呢?
二、注意事项
当你想要动态的移除ViewPager里的某个Item时,╮(╯_╰)╭居然无效!
-
今天,在做到一个需要移除ViewPager的Item的需求时,咕噜咕噜,代码写的真流畅。。。。然而,跑起来之后发现,- -||怎么移除要么没效果,要么数据错乱,google你这是在逗我么?
-
哎,说什么也没用,于是我点进了notifyDataSetChanged方法,看下源码里都做了什么。
public void notifyDataSetChanged() { synchronized (this) { if (mViewPagerObserver != null) { mViewPagerObserver.onChanged(); } } mObservable.notifyChanged(); }
-
然而,发现里面的mViewPagerObserver和mObservable都是抽象类型的。算了,先看下里面还有什么方法吧。咕噜咕噜。。。。。突然看到这么一个方法
/** * Called when the host view is attempting to determine if an item's position * has changed. Returns {@link #POSITION_UNCHANGED} if the position of the given * item has not changed or {@link #POSITION_NONE} if the item is no longer present * in the adapter. * * The default implementation assumes that items will never * change position and always returns {@link #POSITION_UNCHANGED}. * * @param object Object representing an item, previously returned by a call to * {@link #instantiateItem(View, int)}. * @return object's new position index from [0, {@link #getCount()}), * {@link #POSITION_UNCHANGED} if the object's position has not changed, * or {@link #POSITION_NONE} if the item is no longer present. */public int getItemPosition(Object object) { return POSITION_UNCHANGED; }
-
再看到顶部的这么一句话时Called when the host view is attempting to determine if an item’s position * has changed,感觉有点关系,然后赶紧把注释看完。原来该方法默认时返回POSITION_UNCHANGED的
-
POSITION_UNCHANGED是代表什么呢?根据注解大概是这个意思如果pisition指定的位置的item一直不变,就返回POSITION_UNCHANGED,而POSITION_UNCHANGED也是默认返回的。
-
然后下面还有一个POSITION_NONE,大概意思是如果该item是不存在的就返回POSITION_NONE,OK,那么我们就试下重写getItemPosition返回POSITION_NONE吧!
-
^o^yes,解决过程还是比较快速的。