Fragment 的hide()与show()

来源:互联网 发布:网络方案 编辑:程序博客网 时间:2024/05/16 04:34

今天学习了Fragment 的hide()与show()
第一种方法:利用TAG标记位实现与隐藏的方法 记下来 以免遗忘

private void updateFragment(Class<? extends android.support.v4.app.Fragment> cls,String TAG) {        FragmentTransaction transaction = fragmentManager.beginTransaction();        if(cacheFragment!=null){            transaction.hide(cacheFragment);            Log.e(TAG, "我隐藏了" );        }        cacheFragment = fragmentManager.findFragmentByTag(TAG);        if(cacheFragment!=null){            transaction.show(cacheFragment);            Log.e(TAG, "我显示了" );        }else{            try {                cacheFragment = cls.getConstructor().newInstance();            } catch (InstantiationException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            } catch (InvocationTargetException e) {                e.printStackTrace();            } catch (NoSuchMethodException e) {                e.printStackTrace();            }            transaction.add(R.id.container,cacheFragment,TAG);        }        transaction.commit();    }

第二种方法:先实例化所有的Fragment,然后判断显示隐藏

 public void switchContent(android.support.v4.app.Fragment from, android.support.v4.app.Fragment to) {        if (cacheFragment != to) {            cacheFragment = to;            FragmentTransaction transaction = fragmentManager.beginTransaction();            if (to.isAdded()) {    // 先判断是否被add过                transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个            } else {                transaction.hide(from).add(R.id.container, to).commit(); // 隐藏当前的fragment,add下一个到Activity中            }        }    }

第二种相对于第一种,当在处理网络请求的时候会在初始化的时候耗费太多资源,二第一种是想要什么就加载什么,

第一种是利用反射来创建实例可以防止创建无用对象,浪费资源

0 0
原创粉丝点击