在语言中更改时显示IllegalStateException

时间:2018-02-01 11:00:07

标签: android android-fragments

我正在开发一个应用程序,其中有一个Activity和两个Fragments,其中第二个Fragments是第一个孩子。当我进入第二个Fragments并将语言从法语更改为英语时,系统会在我返回应用程序时抛出IllegalStateException,表示Fragments已存在。

 Caused by: java.lang.IllegalStateException: Fragment already added 
SettingsFragment{d25576a #3 id=0x1020011}
android.support.v4.app.FragmentManagerImpl.addFragment
FragmentManager.java, line 1679
android.support.v4.app.BackStackRecord.executePopOps
BackStackRecord.java, line 781
android.support.v4.app.FragmentManagerImpl.executeOps
FragmentManager.java, line 2360
android.support.v4.app.FragmentManagerImpl.executeOpsTogether
FragmentManager.java, line 2149
android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps
FragmentManager.java, line 2103
android.support.v4.app.FragmentManagerImpl.execPendingActions
FragmentManager.java, line 2013
android.support.v4.app.FragmentController.execPendingActions
FragmentController.java, line 388
android.support.v4.app.FragmentActivity.onStart
FragmentActivity.java, line 607
android.support.v7.app.AppCompatActivity.onStart
AppCompatActivity.java, line 178
android.app.Instrumentation.callActivityOnStart
Instrumentation.java, line 1256
android.app.Activity.performStart
Activity.java, line 6972
android.app.ActivityThread.performLaunchActivity

3 个答案:

答案 0 :(得分:0)

您应该阅读堆栈跟踪的第一行:

  

IllegalStateException:已添加片段

如果您添加两次片段,请检查您的代码。

答案 1 :(得分:0)

在活动的@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager() .beginTransaction() .add(R.id.main_frame_layout, new SettingsFragment()) .commit(); } } 中添加片段时,请尝试检查{{1}}:

{{1}}

答案 2 :(得分:0)

在添加片段之前,您应该检查此片段是否尚未添加

Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
        if (fragment == null) {
            MyFragment myFragment = new MyFragment();
            getSupportFragmentManager().beginTransaction().add(R.id.container, myFragment).commit();
        } 
相关问题