为了节省内存和流量,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);
}
}
这是我的相关代码,没有运行没有问题
加个判定是否创建 没创建就新创建一个新的
有时候系统会自动回收