2014-04-10 5 views
2

내비게이션 서랍으로 구성된 MainActivty이 있습니다. 탐색 서랍 코드는 official documentation에 매우 가깝습니다. 이제 MainActivty은 시작시 FragmentA을로드합니다. 탐색 창은 FragmentA에서만 사용할 수 있습니다. 지금까지 그렇게 좋았습니다. 모두 잘되었습니다.오리엔테이션 변경시 onCreate()가 호출되지 않음

이제 MainActivity이 인식하는 화면에서 무엇인가를 탭하고 FragmentAFragmentB으로 바꿉니다. 내가 FragmentB 오전 때, FragmentB.onCreate()에서 나는 다음과 같은 전화 :

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

이을 살표 돌아 가기로 액션 바의 서랍 캐럿을 대체하기 위해서입니다. 이것은 잘 작동합니다.

지금이 시점에서 화면 방향을 변경하면 MainActivty.onCreate()이 호출되지 않습니다. FragmentB.onCreate()이 여전히 호출되며 MainActivity.onCreate()이 호출되지 않았으므로 mDrawerToggle은 null입니다. 따라서 NullPointerException으로 인해 앱이 다운됩니다.

나는 활동을 위해 android:configChanges="orientation"을 사용하지 않고있다. Android 문서의 예제 코드에는 하나의 Activity 만 있고 다른 조각은 없으므로이를 해결하는 방법을 모르겠습니다. 어떤 도움을 주셔서 감사합니다.

+0

** 힌트 :'Fragment'가'ActionBar'를 변경하기를 원한다면'FragmentTransaction'을 커밋하기 전에'fragmentToSwitchTo.setHasOptionsMenu (true)'를 호출하고' invalidateOptionsMenu()'. 'onCreateOptionsMenu()'를 오버라이드하는 것은'Activity'처럼'Fragment' 내부에서 작동합니다. – tambykojak

+0

안녕하세요, 어떻게'onCreateOptionsMenu'를 무시하면 도움이 될지 모르겠습니다. 제발 좀 더 자세히 설명해 주실 수 있습니까? – rgamber

+0

그것이 현재의 문제를 해결하는 데 도움이된다고 말하는 것은 아니며, 그렇다면 대답을 게시하지 않을 것입니다. 하지만 ActionBar를 편집하려면'((MainActivity) getAcitivty()) '를 호출해야한다고 생각합니다. 일단 많은 조각이 있으면 위의 방법을 사용하여이를 정리할 수 있습니다. – tambykojak

답변

0

해결책을 찾았습니다. 어리석은 실수 였어. 프래그먼트 onCreate()은 Activity의 onCreate() 전에 호출됩니다. 그래서 저는 Activity를 참조하는 코드를 Fragment.onCreateView()에 넣었습니다. 이제 모든 것이 잘되어 있습니다 :)