在ViewPager中嵌套使用Fragment,他会预加载第二页的数据,但是滑动到第三页的Fragment,前面的Fragment的数据又被清空了,又要重新加载数据,下面提供两个解决办法:
第一种解决方案:
继承FragmentPagerAdapter 重写destroyItem 方法
@Override
public void destroyItem (View container, int position, Object object) {
}
将当中的super(XXX)去掉
第二种解决方案:
继承PagerAdapter,重写destroyItem()和instantiateItem()方法
public class MainPagerAdapter extends PagerAdapter {
private List<Fragment> fragments;
private FragmentManager manager;
public MainPagerAdapter(List<Fragment> fragments, FragmentManager manager) {
super();
this.fragments = fragments;
this.manager = manager;
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(fragments.get(position).getView());
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = fragments.get(position);
if (!fragment.isAdded()) {
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(fragment, fragment.getClass().getSimpleName());
transaction.commitAllowingStateLoss();
manager.executePendingTransactions();
}
if (fragment.getView().getParent() == null) {
container.addView(fragment.getView());
}
return fragment.getView();
}
}
在项目中使用viewpager+fragment实现新闻的展示 每次滑动到第三页回到前两页都会重新加载数据 项目中上拉加载数据时 分页加载页码会加一 回到页面时加一的页码没有数据 页面就会空白 所以对于用户的体验非常不好 所以不重新加载数据 这样省流量 增加用户体验 还能做到回到fragment时还是上次浏览的地方 不用再重头加载 我使用的是fragmentpageradapter 第一种方法非常有效 又方便