2011-08-02 2 views
5

방향 변경을 통해 ListFragment 서브 클래스를 저장하려고 했으므로 setRetainInstance (true)를 onCreate 함수의 끝에 추가했습니다. onSaveInstanceState 메서드를 추가하여 모든 데이터를 번들에 추가 한 다음 onActivityCreated에 코드를 추가하여 해당 데이터를 다시로드합니다. 불행히도, 그것은 작동하지 않을 것이다.compatibiltiy 라이브러리를 사용할 때 setRetainInstance가 ListFragment에 대해 작동하지 않습니다.

Log.d를 사용하여 디버깅 메시지를 추가했을 때 onSaveInstanceState가 호출되지 않았을뿐만 아니라 onCreate (retainInstance가 true 일 때 문서가 나타나지 않아야 함)가 발견되었음을 발견했습니다. onCreate와 onActivityCreated 모두 내 데이터와 묶음을 가지고 있지 않습니다 (현저하게).

호환성 라이브러리에 문제가있는 것 같아요. 테스트하기 위해 안드로이드 3.0+ 장치가 없지만.

아무런 도움이되지 않아 필요한 경우 코드 스 니펫을 게시 할 수 있습니다. 복잡한 작업을 수행하지는 않습니다.

업데이트 : 나는 (어떻게해야되는) 방향을 변경할 때 setRetainInstance의 일부가 나는 마침내 내 문제가 무엇인지 파악

+1

나는 무엇이 진행되고 있는지보기 위해 compat lib를 디버깅 할 것을 제안합니다. 어떤 버전의 compat lib를 사용하고 있습니까? 나는 조각을 바꿀 때 호출되지 않는 onDestroy가있는 회귀 버그가 적어도 하나 있기 때문에 r1을 사용하고 r2를 피합니다. – PJL

+0

r3을 사용하고 있습니다. 이전 버전이 도움이되는지 확인하겠습니다. 어떻게 compat lib 디버깅에 대한 모든 제안? 나는 자바를 디버깅하는 데있어 매우 익숙하다. – rofer

+0

compat lib 방법 중 하나를 시도해보고 소스 위치를 묻는 메시지가 나타납니다. – PJL

답변

10

작업 것 같다, 그래서들의 OnDestroy가 호출되지 않습니다. 그것 모두는 내가 추가하는 것을 잊었던 단 하나의 줄에 갔다. 내 FragmentActivity 하위 클래스에서 onSaveInstanceState를 오버로드했지만 super.onSaveInstanceState를 호출하지 않았습니다. 외관상으로는, 부모님이 전화를 잊어 버렸던 다른 메소드와는 달리, onSaveInstanceState는 부모 클래스 버전을 호출하는 것을 잊었을 때 런타임 오류를 던지지 않고 대신 setRetainInstance가 작동을 멈 춥니 다. 이 문제를 해결하기 위해 내가 겪었던 두통이 누군가에게 도움이되기를 바랍니다.

+1

저는 같은 문제에 직면했습니다. 문제는 당신이 슈퍼 클래스의 메소드를 호출 할 의무가 없다는 것입니다. 그렇게하지 않으면 파편은 유지되지 않습니다. 이것을 이해하기 위해 compability 라이브러리의 소스 코드를 살펴보아야했습니다. – Malcolm

+1

@rofer setRetainInstance가 작동하려면 onSaveInstanceState를 구현할 필요가 없습니까? –

1

setRetainInstance = true을 설정하고 onSaveInstanceState()과 을 모두 호출하면 Bundle이 반환되지 않습니다.

그러나 ListFragment은 그대로 유지되며 필드에 상태를 저장하고 onActivityCreated() 내부에서 처리하기 만하면됩니다.

마음에, Activity 여전히 파괴되고 다시 만들어집니다.

관련 문제