【发布时间】:2016-11-20 03:07:09
【问题描述】:
当用户按下设置按钮时,我正在显示设置片段。当用户从设置中单击返回按钮时,我想将其删除。
当用户点击设置按钮时,我正在运行以下代码:
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
SettingsFragment conv=new SettingsFragment();
SettingsFragment.newInstance(LOGGED_USERNAME,LOGIN_KEY);
fragmentTransaction.add(R.id.container,conv,"SettingsFragment");
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
当用户从设置片段中按下后退按钮时,我正在运行:
Fragment fragment = Ffmanager.findFragmentByTag("SettingsFragment");
if(fragment != null) {
FfTransaction.remove(fragment).commit();
}
场景:
1)主屏幕上的用户
2)点击设置按钮
3)点击设置中的后退按钮(现在一切都很好)
4)再次点击设置按钮
5)然后再次点击返回按钮
然后应用程序崩溃了。但是为什么?
Logcat:
01-09 13:47:39.572: E/AndroidRuntime(2628): FATAL EXCEPTION: main
01-09 13:47:39.572: E/AndroidRuntime(2628): java.lang.IllegalStateException: commit already called
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:582)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.impact.app.MainActivity.fragmentCleaner(MainActivity.java:422)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.impact.app.MainActivity.returnFromChat(MainActivity.java:1279)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.impact.app.MainActivity.overrideHome(MainActivity.java:1154)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.impact.app.MainActivity.onOptionsItemSelected(MainActivity.java:1097)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.app.Activity.onMenuItemSelected(Activity.java:2566)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:373)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.android.internal.widget.ActionBarView$3.onClick(ActionBarView.java:171)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.view.View.performClick(View.java:4240)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.view.View$PerformClick.run(View.java:17721)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.os.Handler.handleCallback(Handler.java:730)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.os.Handler.dispatchMessage(Handler.java:92)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.os.Looper.loop(Looper.java:137)
01-09 13:47:39.572: E/AndroidRuntime(2628): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-09 13:47:39.572: E/AndroidRuntime(2628): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 13:47:39.572: E/AndroidRuntime(2628): at java.lang.reflect.Method.invoke(Method.java:525)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-09 13:47:39.572: E/AndroidRuntime(2628): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-09 13:47:39.572: E/AndroidRuntime(2628): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
这个话题可以帮助你stackoverflow.com/a/8443684/2455351