因为ViewPager的源码关系,刷新Item时mPagerAdapter.notifyDataSetChanged();
效果不会马上显示到View上面。
ViewPager刷新问题详解这个大佬对源码进行了讲解。
最后给了刷新的思路
按照博主的思路写了一下,觉得可以,所以记录下
我在instantiateItem里面返回的View设置了两个tag
view.setTag(mDataList.get(position));
view.setTag(TAG_POSITION_KEY, position);
一个是对象,一个是position。
最后在getItemPosition
进行比对,判断是否需要刷新。
@Override
public int getItemPosition(@NonNull Object object) {
if (object != null && object instanceof View){
View view = (View) object;
String content = (String) view.getTag();
int position = (int) view.getTag(TAG_POSITION_KEY);
int b = content == getItem(position) ? POSITION_UNCHANGED : POSITION_NONE;
return b;
}
return super.getItemPosition(object);
}
完整代码:
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;