今天学习了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中
}
}
}
第二种相对于第一种,当在处理网络请求的时候会在初始化的时候耗费太多资源,二第一种是想要什么就加载什么,
第一种是利用反射来创建实例可以防止创建无用对象,浪费资源