2014-04-10 40 views
2

我有一個MainActivty,它由一個導航抽屜組成。導航抽屜代碼非常接近official documentation。現在MainActivty在啓動時加載FragmentA。導航抽屜應該只能從FragmentA獲得。到目前爲止這麼好,一切正常。onCreate()未在定位更改時調用

現在我點擊屏幕上的東西,MainActivity可以識別,並用FragmentB替換FragmentA。當我在FragmentB,在FragmentB.onCreate()我把以下內容:

setHasOptionsMenu(true); 
((MainActivity)getActivity()).mDrawerToggle.setDrawerIndicatorEnabled(false); //ActionBarDrawerToggle mDrawerToggle is a public class variable in MainActivity 

這是爲了與回到取代抽屜克拉在動作條箭頭。這工作也很好。

現在,在這一點上,如果我改變屏幕方向,MainActivty.onCreate()不會被調用。 FragmentB.onCreate()仍然被調用,並且mDrawerToggle爲空,因爲MainActivity.onCreate()未被調用。所以該應用程序崩潰,由於NullPointerException。我不使用:android:configChanges="orientation"進行活動。我不知道如何解決這個問題,因爲Android文檔中的示例代碼只有一個Activity並且沒有其他片段。任何幫助表示讚賞。

+0

**提示:**當你希望你的'Fragment'改變'ActionBar'時,只需在提交'FragmentTransaction'之前調用'fragmentToSwitchTo.setHasOptionsMenu(true)',然後調用' invalidateOptionsMenu()'。覆蓋'onCreateOptionsMenu()'然後就像'Activity'一樣在'Fragment'內部工作。 – tambykojak

+0

嗨,不知道如何重寫'onCreateOptionsMenu'會有所幫助。你能否詳細說明一下? – rgamber

+0

我不是說它會幫助你解決當前的問題,如果是這樣的話,我不會發布答案。但似乎你認爲必須調用'((MainActivity)getAcitivty())'來編輯'ActionBar'。一旦你有很多碎片,可以通過上述方法清理。 – tambykojak

回答

0

找到解決方案。這是一個愚蠢的錯誤。在活動的onCreate()之前調用碎片onCreate()。所以我只是把代碼引用到Fragment.onCreateView()中的活動。現在一切都很好:)

相關問題