2014-09-18 1 views
4

조각 A 및 B를 호출 할 수 있습니다. 조각 B는 단편 A에있는 단추를 클릭 할 때 조각 A를 대체하는 A에 대한 상세보기입니다.빈 savedInstanceState 조각 교체시 이중 회전 후 조각을 복원 할 때 번들

대체 코드 : 지금 한 번 조각 B의 화면을 회전하고 이전 조각 A는 아무 문제없이 회복됩니다 돌아 가기 누르면

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_container, new DetailFragment()); 
    transaction.addToBackStack(null); 
    transaction.commit(); 

(가 savedInstanceState 번들로 onActivityCreated에서 그 상태를 복원합니다).

이제 재미있는 부분에 ...

나는 돌아 가기 때문에 내가 int[] data = savedInstanceState.getIntArray(STATE_DATA); onActivityCreated 수익률 널 (null)는 NullPointerException를 얻을 번 이상 조각 B에서 화면을 눌러 회전합니다.

이 동작을 어떻게 해결할 수 있습니까? 유일한 다른 방법은 영구 저장 장치 (환경 설정 또는 DB)를 통해 있었지만 유스 케이스에는 매우 적합하지 않은 것 같습니다.

편집/추가 정보 : 조각 B가 활성화되어있는 동안

조각 A로부터 다음과 같은 방법을 회전 변화에 호출되는 : 번들 자체가 좋아 내가 대답을 발견

답변

3

단지 비어, null이되지 않습니다 : onSaveInstanceState(), onAttach()와에서 onCreate()

내가 onActivityCreated에서 내 상태를 복원하고 있기 때문에 (실제로 SDK를 추천합니다!) 그들은 결코 때문에 내가 처음 회전 후 번들에 저장 내 변수를 잃을 로컬 변수에로드 된 다음 next onSaveInstanceState. 따라서 두 번째 회전 후에 값을 검색하려고하면 해당 값이 null입니다.

해결 방법 : onSaveInstanceState가 다시 호출 될 때 사용할 수 있도록 onCreate()에서 변수를 복원하십시오.

관련 문제