非法状态更改语言时显示异常



我正在开发一个应用程序,它有一个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

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

非法状态异常:已添加片段

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

当您在

onCreate()活动中添加片段时,请尝试检查if (savedInstanceState == null)

@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();
    }
}

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

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

最新更新