2017-04-15 51 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'的好方法;現在我沒有得到這個例外。我不再需要一個答案。

相關問題