【问题标题】:Android IllegalStateException Fragment already addedAndroid IllegalStateException Fragment 已添加
【发布时间】:2017-06-13 20:05:57
【问题描述】:

我的 android 应用程序出现异常。看起来当按下后退按钮并且我们想要弹出返回堆栈时,(我认为这是堆栈跟踪告诉我的)一个非法状态异常被抛出。

AppVersion: 5.0.3
DeviceType: phone
DeviceDetails: SM-J510FN
SystemVersion: 6.0.1
Details: Fragment already added: CategoriesFragmentMobileImpl
{a6aafc9 #0 id=0x7f1200e0 boom.android.new_app.NewCategories.CategoriesFragment}
StackTrace: 

java.lang.IllegalStateException: Fragment already added: CategoriesFragmentMobileImpl{a6aafc9 #0 id=0x7f1200e0 boom.android.new_app.NewCategories.CategoriesFragment}
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1679)
at android.support.v4.app.BackStackRecord.executePopOps(BackStackRecord.java:777)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2353)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7231)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
–

我正在使用支持库

compile 'com.android.support:appcompat-v7:25.1.1'

这是我的代码中唯一添加该片段的地方:

 @Override
    protected void bindViews() {

        Fragment fragment = getSupportFragmentManager().findFragmentByTag(CategoriesFragment.TAG);
        if(fragment == null)
            fragment = CategoriesFragmentMobileImpl.newInstance(this);

        if(fragment.isAdded() == false) {
            getSupportFragmentManager().beginTransaction().
                    replace(R.id.main_fragment_container, fragment, CategoriesFragment.TAG)
                    .commit();
        }

        horizontalScrollView = (HorizontalScrollView)findViewById(R.id.breadcrumbs_ScrollView);
        breadcrumbsContainer = (LinearLayout) findViewById(R.id.breadcrumbs_container);
        second_toolbar = findViewById(R.id.second_toolbar);
        bindNavigationMenu(R.id.drawer_layout, navigationView, null);

    }

我正在查看 Android 中的一些错误,此问题可能与以下内容有关: https://issuetracker.google.com/issues/36928785

这是 onBackPressed 的代码

@Override
public void onBackPressed() {

    if(breadcrumbsContainer.getChildCount() > 0)
    {
    removeBreadCrumb(-1);
}
if(getSupportFragmentManager().getBackStackEntryCount() > 0)
{        
    getSupportFragmentManager().popBackStack();
}
else
{
    super.onBackPressed();
}

}

知道如何复制此问题,甚至堆栈跟踪发生了什么,以便我更好地理解吗?

【问题讨论】:

  • 粘贴你的onbackpressed代码
  • 你在哪里弹出片段?
  • 添加了 onBackPressed() 方法
  • 在您声称要添加片段的唯一代码中,您没有 addToBackStack。然而,当你按下 back 时你 popBackStack 并且你也遇到了 backstack 崩溃。那么您能否发布将片段添加到后台堆栈的代码

标签: android android-fragments android-appcompat illegalstateexception


【解决方案1】:

尝试使用 replaceFragment() 代替 addFragment() !

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多