关于FragmentPgerAdapter 的数据不刷新最好解决办法

由于最近做项目用到了viewpager + fragment 的 模式。 所以在viewpager里遇到了一个问题,就是你用FragmentPagerAdapter,进行加载Fragment 时,你在Fragment里的数据不更新的问题。。所以我们对FragmentPagerAdapter 进行了了解 ,你会发现FragmentPageradapter是pagerAdapter的子类,所以它 Override  了父类的几个方法
@Override
public Fragment getItem(int position) {
       return mFragments.get(position);
}


@Override
public int getCount() {
    return mFragments.size();
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
       return super.instantiateItem(container, position);
}


@Override
public int getItemPosition(Object object) {
    return super.getItemPosition(object) ;
}
其中  我们通过Android 源码的学习 ,得知viewpager 第一次 把Fragment 实例化 出来之后 就保存到了 内存当中,之后对Fragment中的数据更新都不会改变,到这里有许多同学就会问了,为什么Fragment 不会更新??????


其实就是viewpager 显示 Fragment 的时候  就回去调用FragmentpagerAdapter 的
public int getItemPosition(Object object)
方法
如果该方法在内存中找到了 实例化的Fragment,他就会把实例化的Fragment 显示出来。。应对这个难题  我给出了两种解决方法,但是我觉得不是最好的方法。俗话说得好——能拔脓的膏药 就是好膏药!!
方法一
就是把 
public int getItemPosition(Object object)的返回值改成
POSITION_NONE
 It which means: "Fragment must be always recreated"
方法二
(1)

public int getItemPosition(Object object)
里重新创建一个新的Fragment
@Override
public int getItemPosition(Object object) {
    if (object instanceof ActorFragment){
        ((ActorFragment)object).update();
    }else if (object instanceof MusicFragment){
        ((MusicFragment)object).update();
    }else if (object instanceof NewMusicFragment){
        ((NewMusicFragment)object).update();
    }else if (object instanceof RecommendFragement){
        ((RecommendFragement)object).update();
    }


      return super.getItemPosition(object) ;
}
update 里放 你对Fragment里的UI进行的改变,或者是加载数据!!!!


(2)
对Fragment 增加一个接口
package activity.techwell.com.slidingmenu.ZDYinterface;


/**
 * Created by Administrator on 2016/5/25.
 * 实现fragment的数据加载
 */
public interface Update {
    public void update();
}


可以参考以下的文章http://stackoverflow.com/questions/18088076/update-fragment-from-viewpager?answertab=active#tab-top 进行学习!!


猜你喜欢

转载自blog.csdn.net/u013763766/article/details/51613747