Eri*_*lén 6 android android-fragments fragmentmanager fragment-backstack
我有一个带有片段的活动,以及该活动中用于管理片段的两个简单方法:pushFragmentImmediate()和popFragmentImmediate()。
public void pushFragmentImmediate(Fragment fragment) {\n FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\n transaction.replace(R.id.fragment_container, fragment)\n .addToBackStack(null)\n .commitNow();\n}\n\npublic void popFragmentImmediate() {\n getSupportFragmentManager().popBackStackImmediate();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这些事务必须立即执行,因为遗留代码依赖于始终保持最新的返回堆栈。
\n\n现在,如果满足某些条件,我会Fragment弹出一个窗口:onResume
@Override\npublic void onResume() {\n super.onResume();\n if (condition) {\n ((Main) getActivity()).popFragment();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这会产生错误。\n可以在不更改为 的情况下避免此错误popStackImmediate()吗popBackStack()?popBackStackImmediate()或者当它不会返回错误时我可以转移到其他阶段吗?或者我以错误的方式思考这个问题?
完整轨迹:
\n\njava.lang.RuntimeException: Unable to resume activity {se.esillen.testproject/se.esillen.testproject.Main}: java.lang.IllegalStateException: FragmentManager is already executing transactions\n at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3433)\n at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3473)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2736)\n at android.app.ActivityThread.-wrap12(ActivityThread.java)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1481)\n at android.os.Handler.dispatchMessage(Handler.java:102)\n at android.os.Looper.loop(Looper.java:179)\n at android.app.ActivityThread.main(ActivityThread.java:6152)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)\n Caused by: java.lang.IllegalStateException: FragmentManager is already executing transactions\n at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:2167)\n at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2223)\n at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:834)\n at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:794)\n at se.esillen.testproject.Main.popFragment(Main.java:25)\n at se.esillen.testproject.TestFragment.onResume(TestFragment.java:26)\n at android.support.v4.app.Fragment.performResume(Fragment.java:2401)\n at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1465)\n at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)\n at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)\n at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3217)\n at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3181)\n at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:214)\n at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:470)\n at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:459)\n at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:171)\n at android.app.Activity.performResume(Activity.java:6856)\n at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3410)\n at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3473)\xc2\xa0\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2736)\xc2\xa0\n at android.app.ActivityThread.-wrap12(ActivityThread.java)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1481)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:102)\xc2\xa0\n at android.os.Looper.loop(Looper.java:179)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:6152)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)\n\n\xc2\xa0\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1709 次 |
| 最近记录: |