之前开发项目的时候,ViewPager嵌套Fragment的时候第二次切换回已经打开过Fragment的时候,此时Fragemnt显示为空白,当时遇到这个问题的时候,真是一头雾水,那会因为赶项目,就没去分析这个问题的产生原因,当时解决的时候在Activity中调用viewPager.setOffscreenPageLimit(N)此方法去解决,此方法代表viewPager切换的时候会重新创建当前界面左右的N个界面;
问题描述.gif问题产生原因:就是onCreateView每次都调用导致的,这样每次打开fragment每次都会设置新的view,而调试发现,之前的view并没有被回收……这就导致了新的Fragment覆盖了我们之前的Fragment,这时候就出现了Fragemnt空白的现象。
解决方式:
1 viewpager.setOffscreenPageLimit(num);num为你的tab数,就是我使用的哪种方式
2 在Fragment中onCreateView里面,判断Fragment是否已经添加了contentView(第一次加载时,可以将view保存下 来,再 次加载时,判断保存下来的view是否为null),如果保存的view为null,返回新的view ,否则,先将 保存的view从父view中移除,然后将该view返回出去
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//判断该存不存在
if(view != null){
ViewGroup parent = (ViewGroup) view.getParent();
if(parent != null){
//存在就将其删除
parent.removeView(view);
}
}
view = View.inflate(getActivity(), R.layout.layout_one, null);
tab_main = (TabLayout) view.findViewById(R.id.tab_main);
return view;
}
3 在ViewPager的Adapter中重写public void destroyItem(ViewGroup container, int position, Object object),去掉super.destroyItem(container, position, object);
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//方法体中什么也不用写
}
4
以上就是我对该ViewPager+Fragemnt遇到的问题已经总结,有不对的地方,望各位多多指点,共同学习。
网友评论