首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IllegalStateException:已添加到the主机片段中的片段

IllegalStateException:已添加到the主机片段中的片段
EN

Stack Overflow用户
提问于 2014-09-19 12:30:01
回答 14查看 113.4K关注 0票数 92
代码语言:javascript
复制
FATAL EXCEPTION: main
Process: com.example.loan, PID: 24169
java.lang.IllegalStateException: Fragment already added: FormFragment{428f10c8 #1 id=0x7f050055 form}
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1533)
    at android.support.v4.app.FragmentManagerImpl$2.run(FragmentManager.java:489)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5068)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
    at dalvik.system.NativeStart.main(Native Method)

所以,我有一个用tabhost构建的android应用程序。总共有三个选项卡,在tab2中,有一个在tab2中进行片段事务的按钮(在片段活动中调用函数)

代码语言:javascript
复制
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
        t.replace(R.id.realtabcontent, mFrag);
        t.addToBackStack(null);
        t.commit();

如果我像这样运行,会有一个例外:

在tab2中,我按下按钮以更改fragment

  • Go to other选项卡(例如选项卡1或选项卡3)按回退按钮

  • Throw exception

如何解决这个问题?感谢你的帮助

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2015-04-01 22:08:37

当我们在删除之前尝试添加相同的片段或DialogFragment两次时,就会发生这种情况。

只要打个电话

代码语言:javascript
复制
if(mFragment.isAdded())
{
     return; //or return false/true, based on where you are calling from
}

话虽如此,我看不出为什么要删除旧的片段并再次添加相同的片段,因为我们可以通过简单地将参数传递给片段内的方法来更新UI/数据

票数 165
EN

Stack Overflow用户

发布于 2017-09-05 22:05:51

删除旧片段,以防它仍然被添加,然后添加新片段:

代码语言:javascript
复制
FragmentManager fm = getSupportFragmentManager();
Fragment oldFragment = fm.findFragmentByTag("fragment_tag");
if (oldFragment != null) {
    fm.beginTransaction().remove(oldFragment).commit();
}
MyFragment newFragment = new MyFragment();
fm.beginTransaction().add(newFragment , "fragment_tag");
票数 14
EN

Stack Overflow用户

发布于 2014-09-19 12:51:21

您只需检查下面提到的片段中的一个条件:

代码语言:javascript
复制
if(!isAdded())
{
    return;
}

如果片段当前被添加到其activity中,则isAdded =返回true。取自官方文档。如果已经添加了该片段,则不会添加该片段

请查看下面的链接以获取参考:

http://developer.android.com/reference/android/app/Fragment.html#isAdded()

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25926402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档