首页新闻找找看学习计划

android之针对fragment多次调用onCreateView的问题的解决方法疑问

0
悬赏园豆:20 [待解决问题]

有一个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多次调用的解决方法往事提供的都是这个,难道就没有我刚才说的这个问题吗?请大牛们帮忙解惑!!!



shaotine的主页 shaotine | 初学一级 | 园豆:166
提问于:2015-12-15 21:13
< >
分享
所有回答(4)
0

防止多次调用的方法难道不是setOffscreenPageLimit设置界面缓存?

林J | 园豆:202 (菜鸟二级) | 2016-02-19 17:37
1

为防止onCreateView多次调用,应该给ViewPager设置页面缓存,当Fragment依赖的Acivity未销毁时,Fragment一般就不销毁,也就不会调用onCreateView方法。代码如下:

mViewPager = (ViewPager) findViewById(R.id.view_pager);
mViewPager.addOnPageChangeListener(this);
mViewPager.setOffscreenPageLimit(5);

 

_启明 | 园豆:38 (初学一级) | 2016-03-23 10:05
0

滑动的时候调用当前Fragment的hide方法,让它隐藏起来不就好了

Fndroid | 园豆:207 (菜鸟二级) | 2016-04-08 11:38
0

if (rootView.getParent() != null) { ViewGroup p = (ViewGroup) rootView.getParent(); p.removeAllViews(); }

改成如下代码

ViewGroup p = (ViewGroup) root.getParent();
if (p != null) {
p.removeAllViewsInLayout();
}

总李写代码 | 园豆:221 (菜鸟二级) | 2016-06-23 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册