2014-01-11 118 views
0

我創建了一個片段programmaticaly(沒有在活動佈局中聲明)。但是當我第二次嘗試打開它時,應用程序崩潰,因爲「提交已被稱爲」。嘗試再次創建片段時調用提交時出錯

日誌:

01-11 04:14:41.469: E/AndroidRuntime(13556): FATAL EXCEPTION: main 
01-11 04:14:41.469: E/AndroidRuntime(13556): java.lang.IllegalStateException: commit already called 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:582) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.app.BackStackRecord.commit(BackStackRecord.java:574) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at neviat.tbf.tartarugaburguer.Activity_Shopping.openFragment(Activity_Shopping.java:235) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at neviat.tbf.tartarugaburguer.Activity_Shopping.onOptionsItemSelected(Activity_Shopping.java:226) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.app.Activity.onMenuItemSelected(Activity.java:2548) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:166) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.widget.AbsListView.performItemClick(AbsListView.java:1100) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.widget.AbsListView$1.run(AbsListView.java:3423) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.os.Handler.handleCallback(Handler.java:725) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.os.Looper.loop(Looper.java:137) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at android.app.ActivityThread.main(ActivityThread.java:5041) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at java.lang.reflect.Method.invokeNative(Native Method) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at java.lang.reflect.Method.invoke(Method.java:511) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-11 04:14:41.469: E/AndroidRuntime(13556): at dalvik.system.NativeStart.main(Native Method) 

在活動 - 該功能創建的片段:

private void openFragment(Fragment fragment, String tag) { 
    fragmentTransaction.replace(android.R.id.content, fragment, tag); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

在片段 - 該功能是關閉的片段:

private void finish() { 
    getFragmentManager().popBackStack(); 
} 
+1

而不是重新使用傳入的事務,創建一個新的FragmentTransaction實例... –

+0

THAAAAAANKSSSSS !!!謝謝你! = DDD –

+0

回答這個問題,所以我可以標記爲答案^^ –

回答

2

**

不是重用傳入的交易中,創建一個新的 FragmentTransaction實例。

**

感謝

1

的問題是,你是不是創建一個新的事務,這就是爲什麼你得到這個error.You又要開始一個新的事務:

fragTransaction = fragManager.beginTransaction(); 
fragTransaction.replace(R.id.old_fragment, newFragment); 
fragTransaction.addToBackStack(null); 
fragTransaction.commit(); 

謝謝。

相關問題