把Fragment 放到一个List中,每次从List读取。比如TabHost它就是把TabSpec放到List中,借鉴下看行不哈:private List<TabSpec> mTabSpecs = new ArrayList<TabSpec>(2);
这段是写在onCreate方法里的吧,可是菜单切换的时候调用的是selectItem这个方法
嗯,之前没有设置全局变量,@Override public void selectItem(int position, String title) { // update the main content by replacing fragments
Fragment fragment = null; switch (position) { case 0: fragment = homeFragment; break; case 1: if(null == reportFragment){ reportFragment = new ReportFragment(); } fragment = reportFragment; break; case 2: if(null == dataFragment){ dataFragment = new DataFragment(); } fragment = dataFragment; break; default: 现在是这么写的,但是虽然没有重新new Fragment 但是每次返回去的时候又重新加载了,而且如果是多Tab页面的话,会显示空白,如图圈着的都是空白也不会加载,除非滑动是它销毁后重新创建视图才会重新加载,我看网易的就没有重新加载,就好像调用了toggle();一样,很平静的就返回去了
contentFragment = new Fragment1();
} else {//不等于null,直接get出来
//不等于null,找出之前保存的当前Activity显示的Fragment
contentFragment = getSupportFragmentManager().getFragment(savedInstanceState, "contentFragment");
}
//设置内容Fragment
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, contentFragment)
.commit();
public void selectItem(int position, String title) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = homeFragment;
break;
case 1:
if(null == reportFragment){
reportFragment = new ReportFragment();
}
fragment = reportFragment;
break;
case 2:
if(null == dataFragment){
dataFragment = new DataFragment();
}
fragment = dataFragment;
break;
default: 现在是这么写的,但是虽然没有重新new Fragment 但是每次返回去的时候又重新加载了,而且如果是多Tab页面的话,会显示空白,如图圈着的都是空白也不会加载,除非滑动是它销毁后重新创建视图才会重新加载,我看网易的就没有重新加载,就好像调用了toggle();一样,很平静的就返回去了
if(!fragment.isAdded()){
getSupportFragmentManager().beginTransaction().hide(mContent)
.add(R.id.menu_frame_content, fragment).commit();
}else{
getSupportFragmentManager().beginTransaction().hide(mContent)
.show(fragment).commit();
}
mContent = fragment;
}这样解决了