【发布时间】:2015-04-02 00:33:14
【问题描述】:
我在调用 finish() 然后重新打开应用程序时收到上述错误。这是管理导航 onBackPressed() 的代码。
android.app.FragmentManager settingsFragmentManager = getFragmentManager();
FragmentManager fragmentManager = getSupportFragmentManager();
if (settingsFragmentManager.getBackStackEntryCount() > 0)
settingsFragmentManager.popBackStackImmediate();
else if (fragmentManager.getBackStackEntryCount() > 0)
fragmentManager.popBackStackImmediate();
if (fragmentManager.getBackStackEntryCount() == 0 && endIfEmpty) finish();
if (fragmentManager.getBackStackEntryCount() == 0 && !endIfEmpty) loadView(0);
if (fragmentManager.getBackStackEntryCount() == 0 && !userHasLoggedIn)
{
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(loginBroadcastReceiver);
finish();
}
loadView 调用的方法负责根据用户选择的内容添加片段。当使用 0 作为参数调用它时,它会添加默认片段。
这个方法:
private void loadView(int position)
{
FragmentManager fragmentManager = getSupportFragmentManager();
Bundle fragmentArgs = new Bundle();
if (drawerOpened)
mDrawerLayout.closeDrawer(drawerHolderLayout);
switch (position) {
case 0:
ProfileEditFragment activityList = new ProfileEditFragment();
fragmentArgs.clear();
fragmentArgs.putString(ProfileEditFragment.ARG_AGENT_ID, String.valueOf(prefClass.getAgentId()));
fragmentArgs.putString(ProfileEditFragment.ARG_USERNAME, prefClass.getUsername());
fragmentArgs.putString(ProfileEditFragment.ARG_PASSWORD, prefClass.getHashedPassword());
fragmentArgs.putInt(ProfileEditFragment.ARG_OPERATION, ProfileEditFragment.LOAD_ALL_DATA);
activityList.setArguments(fragmentArgs);
fragmentManager.beginTransaction().add(R.id.main_activity_content, activityList).addToBackStack(null).commit();
//activityList.retrieveActivityFromServer(ProfileEditFragment.LOAD_ALL_DATA);
break;
}
}
执行此行时出现异常:
fragmentManager.beginTransaction().add(R.id.main_activity_content, activityList).addToBackStack(null).commit();
但是,第一次启动应用程序时不会发生此异常。它仅在调用完成()后重新启动时出现。值得一提的是,添加的第一个片段是一个LoginFragment。登录过程完成后,将调用 popBackstack,backstack 变为空并调用 loadView(0)。那么,为什么调用loadView的时候会崩溃,而添加LoginFragment的时候却没有呢?
提前致谢。
【问题讨论】:
-
感谢您的回复,我以前读过 Alex Lockwood 的帖子,这就是我在 onPostResume 中进行交易的原因。正如我所说,我第一次启动该应用程序时一切正常。添加了 LoginFragment,登录完成且没有错误,调用 popBackStack,它变为空并且添加了 ActivityFragment 没有问题。但是如果用户离开应用程序(finish() 被调用)然后重新打开它,LoginFragment 被添加,popBackStack 被调用,它变为空并且当我尝试添加 ActivityFragment 时发生异常。为什么我第二次可以添加LoginFragment,但不能添加ActivityFragment?
-
我现在正在经历同样的问题。我读过亚历克斯洛克伍德的帖子,但它们似乎不适用于我的情况。如果我退出并从我的 Facebook 登录/注册活动返回,我只会看到这个问题。还在研究中……
-
@TommyVisic 如果您看到此内容,请通过 Skype 与我联系:phiter_fernandes。我需要和你谈谈你多年前制作的游戏。
标签: java android android-fragments illegalstateexception