/ /言語を変更するとIllegalStateExceptionが表示される-android、android-fragments

language - android、android-fragmentsで変更するとIllegalStateExceptionが表示される

私は1つを持っているアプリを開発しています Activity 2つ Fragments 二番目 Fragments 最初の子です。 2つ目に入ると 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

回答:

回答№1は0

スタックトレースの最初の行を読む必要があります。

IllegalStateException:フラグメントはすでに追加されています

フラグメントを2回追加する場合は、コードを確認してください。


回答№2の場合は0

チェックしてみてください if (savedInstanceState == null) フラグメントを追加するとき onCreate() あなたの活動の

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

回答№3の場合は0

フラグメントを追加する前に、このフラグメントがまだ追加されていないことを確認する必要があります

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