2014-01-11 65 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(); 

谢谢。

相关问题