Fragement 重复添加的问题

为了节省内存和流量,fragment使用show和hide的方式展示。
fragment添加之前做了isAdded()判断,但是项目上线还是会出现Fragment is already add的Bug,请教怎么解决!

确定你两次添加的fragment是一个对象?贴出代码看看

可以一次在oncreate方法中添加完,后面就是show和hide了

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fl = (FrameLayout) findViewById(R.id.fl);
fragmentManager1 = getFragmentManager();
fragmentTransaction1 = fragmentManager1.beginTransaction();
mf1 = new MyFragement1();
mf2 = new MyFragement2();
mf3 = new MyFragement3();
fragmentTransaction1.add(R.id.fl,mf1);
fragmentTransaction1.add(R.id.fl,mf2);
fragmentTransaction1.add(R.id.fl,mf3);
fragmentTransaction1.hide(mf2);
fragmentTransaction1.hide(mf3);
fragmentTransaction1.commit();

}
public void click(View view)
{
    fragmentTransaction1 = fragmentManager1.beginTransaction();
    hide();
    switch (view.getId()){
        case R.id.bt1:
                fragmentTransaction1.show(mf1);
            break;
        case R.id.bt2:

                fragmentTransaction1.show(mf2);
            break;
        case R.id.bt3:

                fragmentTransaction1.show(mf3);
            break;
    }
    fragmentTransaction1.commit();
}
public void hide()
{
    if(mf1!=null )
    {
        fragmentTransaction1.hide(mf1);
    }
    if(mf2!=null)
    {
        fragmentTransaction1.hide(mf2);
    }
    if(mf3!=null)
    {
        fragmentTransaction1.hide(mf3);
    }

}

}

private void initFragment(int index) {
// 由于是引用了V4包下的Fragment,所以这里的管理器要用getSupportFragmentManager获取
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
// 开启事务
android.support.v4.app.FragmentTransaction transaction = fragmentManager.beginTransaction();
// 隐藏所有Fragment
hideFragment(transaction);
switch (index) {
case 0:
if (null == myFragment) {
myFragment = new MainFragment();
transaction.add(R.id.mainMainFragmentLayout, myFragment);
} else {
transaction.attach(myFragment);
}
break;
case 1:
if (null == previewFragment) {
if (null != fileBrowserFragment) {
transaction.detach(fileBrowserFragment);
}
previewFragment = new PreviewFragment();
transaction.add(R.id.mainMainFragmentLayout, previewFragment);
} else {
if (null != fileBrowserFragment) {
transaction.detach(fileBrowserFragment);
}
transaction.attach(previewFragment);
}
break;
case 2:
if (null == musicFragment) {
musicFragment = new MusicFragment();
transaction.add(R.id.mainMainFragmentLayout, musicFragment);
} else {
transaction.attach(musicFragment);
}
break;
case 3:
if (null == fileBrowserFragment) {
if (null != previewFragment) {
transaction.detach(previewFragment);
}
fileBrowserFragment = new FileBrowserFragment();
transaction.add(R.id.mainMainFragmentLayout, fileBrowserFragment);
} else {
if (null != previewFragment) {
transaction.detach(previewFragment);
}
transaction.attach(fileBrowserFragment);
}
break;
case 4:
if (null == friendsFragment) {
friendsFragment = new MyFriendsActivity();
transaction.add(R.id.mainMainFragmentLayout, friendsFragment);
} else {
transaction.attach(friendsFragment);
}
break;
default:
break;
}

    // 提交事务
    transaction.commit();

}

private void hideFragment(android.support.v4.app.FragmentTransaction transaction) {
    if (null != myFragment) {
        transaction.detach(myFragment);
    }
    if( null != previewFragment){
        transaction.detach(previewFragment);

    }
    if(null != musicFragment ){
        transaction.detach(musicFragment);
    }
    if (null != fileBrowserFragment) {

        transaction.detach(fileBrowserFragment);
    }
    if (null != friendsFragment) {
        transaction.detach(friendsFragment);
    }

}

    这是我的相关代码,没有运行没有问题

加个判定是否创建 没创建就新创建一个新的

有时候系统会自动回收

http://www.cnblogs.com/qixing/p/3981244.html