我正在开发一个应用程序,其中有一个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
答案 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();
}