public class MypagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> mlist;
private Context mContext;
private FragmentManager fm;
private Map<Integer, Fragment> map = new HashMap<Integer, Fragment>();
public MypagerAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.fm = fm;
this.mlist = list;
}
@Override
public Fragment getItem(int arg0) {
return mlist.get(arg0);//显示第几个页面
}
@Override
public int getCount() {
return mlist.size();//有几个页面
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
//记录每个position位置最后显示的Fragment
map.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
public void upDate(List<Fragment> list) {
this.mlist = null;
this.mlist = list;
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
//获取指定位置最后显示的Fragment
public Fragment getCurrentFragment(int index) {
return map.get(index);
}
}
将每个fragment保存到map中,之后在要刷新的地方调用 你想要刷新的fragment的方法
Fragment fragment = (Fragment) mPagerAdapter.getCurrentFragment(0);
fragment.showEwm();
showEwm为fragment中的方法,不过有一个问题,这个方法只能刷新可见fragment.
当你想要刷新不可见fragment,也可以这么写,不过得配合setUserVisibleHint方法,就是在fragment用户可见的时候,重新加载数据,这样做才不会导致刷新不可见fragment报出控件空指针的问题,当然控件你得自己判空.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
showEwm();
}
}