在onsaveinstancestate

时间:2017-04-15 16:11:53

标签: android replace screen orientation illegalstateexception

我为这个主题阅读了许多主题,但没有什么可以帮助我。 我无法发布我的代码,但我试着解释一下我的情况:

我收到IllegalStateException:onSaveInstanceState之后无法执行此操作

我有一个活动主页(带有DrawerLayout /导航抽屉)。在此活动中始终是1个片段。首先是片段WelcomePage。

当用户点击片段时会被新片段替换(我称之为:FootballClubs)。这个片段包含一个ViewPager,因此它包含多个页面;每个页面都是一个片段FootballClub。 (因此片段FootballClubs由一个FootballClub片段的多页组成)。在每个FootballClub片段中是一个用户可以点击的按钮;点击打开一个新片段(我称之为NewFragment)。

首先,一切正常,没有异常被抛出。我可以尽可能频繁地点击按钮,每次正确显示新片段时都没有异常,onBackPressed我会使用ViewPager返回到FootballClubs。但是当我转动我的智能手机时,屏幕方向至少改变了一次,当我点击按钮打开新片段(我要显示的任何片段)时,我得到以下异常:

IllegalStateException:在onSaveInstanceState

之后无法执行此操作

我用以下代码替换片段WelcomePage / FootballClubs / NewFragment:

protected void replaceSubfragment(int containerID, Fragment newFragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(containerID, newFragment);
        transaction.commit();
}

在transaction.commit()中抛出异常; containerID始终相同(活动布局中的FrameLayout)

其他一些信息:

  • 如果我更换 器transaction.commit(); 同 transaction.commitAllowingStateLoss(); 我得到了这个例外:IllegalStateException:活动已被销毁(虽然我点击/做同样的事情)

  • 我的FragmentActivity类Main中替换了所有片段;单击按钮时,SectionPage的子类会被注意到并从FragmentActivity调用一个侦听器,这样FragmentActivity就可以替换片段(BaseActivity将侦听器提供给FootballClubs片段,并将其交给SectionPage的子类) / p>

  • 由于我只在FragmentActivity中替换片段,所以我不使用getChildFragmentManager(); (据我所知,这也不起作用)

  • 我知道当方向发生变化时,系统会破坏并重新创建活动,但是我无法对这些信息做些什么......除了这个按钮,整个应用程序都能正常工作

  • 如果我想在按钮上显示对话框而不是NewFragment,我也会收到IllegalStateException

  • 在我的FragmentActivity中,我有一个变量activeModule;在这里我可以检查activeModule.isAdded();抛出异常时,isAdded()返回false ..所以我可以检查是否会抛出错误

我希望我能描述一下我的问题。屏幕方向毁了一切,不知道为什么.. 如果您需要更多信息,请问我..如果您需要一些代码,我可以发布一些内容。

谢谢!

1 个答案:

答案 0 :(得分:0)

我确信异常是因为ViewPager,但我找不到解决方案。

最后,我找到了一种避免称为“NewFragment”的好方法;现在我没有得到这个例外。我不再需要答案了。