最近在做搜索的开发,遇到viewPager嵌套fragment的数据刷新的问题,在网上搜了搜没有搜到自己想要的答案,就自己写了一个,亲测有效,希望可以帮到遇到这类问题的小伙伴;
刚开始的时候我在我的baseFragment里添加了一个刷新的方法,其他的fragment继承:
public abstract class SearchBaseFragment extends BaseFragment { public abstract void upDate(String data) ; }
现在看看我的其中一个SearchFragment实现:
/** * 更新数据 * @param data */ @Override public void upDate(String data) { this.data = data; }
当数据变化的时候,刷新viewpager,viewpager刷新的方法,有几种这里我用的是重写
public int getItemPosition(Object object) { //POSITION_NONE 刷新所有的 Item return PagerAdapter.POSITION_NONE; }什么时候调用upDate()方法呢,调用了viewpager的notifychanged的方法后viewpager会重走instantiateItem方法,在这个方法里我是这么做的
@Override public Object instantiateItem(ViewGroup container, int position) { searchBaseFragment = ((SearchBaseFragment) super.instantiateItem(container, position)); if (mData!=null&&mData.length()>0){ searchBaseFragment.upDate(mData); } return searchBaseFragment; }这样我们要更新的数据通过fragment里了,不知道同学们看到我的SearchFragment里的upDate方法会不会有疑问,为什么只是接收一下数据,并没有做实质性的操作,这是因为viewpager刷新的时候fragment会重走oncreate方法,所以你在update里的用的对象会为空,所以你只需在此方法里做接收,在SearchFragment里我会初始化数据后,更新数据的时候直接时候传过来的data值即可。
是不是很简单呢,第一次写博客,希望能帮到你!!!