今天遇到一个问题是Fragment+ViewPager搭配使用的时候,页面刷新不执行OnCreateView方法到时,数据是有刷新了,但是UI界面没有刷新,还是原来的数据显示。
下面先说说我项目中的需求吧,这样我们可以针对问题去解决。
需求:在一个页面中使用ViewPager+Fragment搭配使用,在ViewPager中实现不同页面的滑动。并且ViewPager中的页面数量是根据网络请求回来的数据进行添加的。每个页面还都有相应的网络请求。这里还要考虑到的因素是如果网络请求出错的时候,那么没有数据ViewPager就不能根据数据进行页面的添加,这里就要默认的显示一个页面。
我这里的做法是:先定义一个容量来装载页面ArrayList fragments,程序一进入的时候先默认的给fragments添加一个页面默认显示,后面再在网络请求回数据的时候再fragments.clear();清空列表的数据,再重新添加页面数据。运行了之后,根本就没有效果。当你更新里fragment List集合后调用FragmentPagerAdapter 的notifyDataSetChanged方法时发现数据根本就没有刷新。网络上会提到pageadapter的刷新方案如下代码:
复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
结果你发现是刷新了一下但内容还是原始的数据。通过对fragmentpageadapter的源码查看你会在instantiateItem方法里面发现这一段
// Do we already have this fragment?
String name = makeFragmentName(container.getId(), position);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG,