2017-04-15 98 views
1

我阅读了许多主题,但没有任何内容可以帮助我。 我不能发布我的代码,但我试着解释我的情况:IllegalStateException在onsaveinstancestate后无法执行此操作

I'm得到一个IllegalStateException:不能与DrawerLayout /导航执行此操作的onSaveInstanceState

后,我有一个活动主(抽屉)。在这个活动中总是有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抛出(); 数据筒始终是相同的(在的FrameLayout活动布局)

一些额外的信息:

  • 如果我更换 器transaction.commit(); 与 transaction.commitAllowingStateLoss(); 我得到这个异常:IllegalStateException异常:活动遭到破坏(虽然我点击/做同样的)

  • 所有片段在我FragmentActivity类主要被替换;当你点击按钮时,SectionPage的子类会被注意到,并从FragmentActivity调用一个监听器,这样FragmentActivity就可以替换这些片段(BaseActivity将监听器转换为FootballClubs片段,并将其传递给SectionPage的子类)

  • 由于我只替换了我的FragmentActivity中的片段,因此我不使用getChildFragmentManager(); (据我记忆,这并没有工作太)

  • 我知道活动被取消和系统重新定向时改变方向,但我不能做这些信息..整个应用程序完美的作品,除了这个按钮

  • 如果我想显示按钮的对话,而不是NewFragment点击我得到一个IllegalStateException太

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

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

谢谢!

回答

0

我觉得这个例外是因为ViewPager,但我没有找到解决方案。我发现一个避免调用'NewFragment'的好方法;现在我没有得到这个例外。我不再需要一个答案。

相关问题