在ViewPager中嵌套使用Fragment,他会预加载第二页的数据,但是滑动到第三页的Fragment,前面的Fragment的数据又被清空了,又要重新加载数据,下面提供两个解决办法:
第一种解决方案:
继承 FragmentPagerAdapter 重写 @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();
}
}版权声明:本文为q908555281原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。