有一个ViewPager,里面有5个fragment,为了避免每次滑动切换fragment时候都去调用onCreateView的界面初始化方法,按照网上提供的方法,于是做了如下修改:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (rootView == null) { rootView = inflater.inflate(R.layout.fragment, container, false); initView(rootView); } if (rootView.getParent() != null) { ViewGroup p = (ViewGroup) rootView.getParent(); p.removeAllViews(); } return rootView; }
但是发现,这里有个问题,如果走到
rootView.getParent() != null
这个分支后,会导致整个Fragment里的view都被删除了,从而导致这个界面就显示不出来。关于onCreateView多次调用的解决方法往事提供的都是这个,难道就没有我刚才说的这个问题吗?请大牛们帮忙解惑!!!
防止多次调用的方法难道不是setOffscreenPageLimit设置界面缓存?
为防止onCreateView多次调用,应该给ViewPager设置页面缓存,当Fragment依赖的Acivity未销毁时,Fragment一般就不销毁,也就不会调用onCreateView方法。代码如下:
mViewPager = (ViewPager) findViewById(R.id.view_pager); mViewPager.addOnPageChangeListener(this); mViewPager.setOffscreenPageLimit(5);
滑动的时候调用当前Fragment的hide方法,让它隐藏起来不就好了
if (rootView.getParent() != null) { ViewGroup p = (ViewGroup) rootView.getParent(); p.removeAllViews(); }
改成如下代码
ViewGroup p = (ViewGroup) root.getParent();
if (p != null) {
p.removeAllViewsInLayout();
}