귀하의 활동에 Views
에 onRestoreInstanceState()
으로 복원하려면 고유 ID가 있어야한다고 Android 개발자 가이드에 알려줍니다. 이는 onRestoreInstanceState()
이 ID를 키로 사용하여 SparseArray
을 만들어 작동하기 때문입니다.onRestoreInstanceState() 및 고유보기 ID
이렇게 많은 표준 안드로이드 방식이 ID 재사용을 권장하기 때문에 매우 이상합니다. 예를 들어, ArrayAdapter
의 모든 생성자는 resourceId를 매개 변수로 사용하므로 ListView
에있는 모든 자식에 대해 동일한 xml 리소스가 확장됩니다. 마찬가지로 xml에 <include layout ...>
을 사용하면 뷰 ID를 다시 사용하게됩니다.
개발자가 실제로 표준, 권장 방식을 사용하지 않는 한 실제로 모든 Views
에 고유 ID가 있다는 요구 사항을 충족하는 많은 응용 프로그램이 있다는 것을 알 수 없습니다.
이 결론이 잘못 되었습니까? 또한 ID가 모두 다르지 않은 경우 onRestoreInstanceState
의 동작은 무엇이며 수용 가능한 동작입니까?
편집
다음과 같이 관련 따옴표 페이지 http://developer.android.com/training/basics/activity-lifecycle/recreating.html에 표시되는 읽기 :
참고 : 위해서는 안드로이드 시스템을위한 활동의 뷰 상태를 복원하기 위해, 각 뷰해야 android : id 속성으로 제공되는 고유 한 ID가 있어야합니다.
주의 : 기본 구현이 뷰 계층 구조의 상태를 복원 할 수 있도록 항상 onRestoreInstanceState()의 수퍼 클래스 구현을 호출하십시오.
어디에서 볼 수 있습니까? onRestoreInstanceState에 대한 설명서에 없습니다. 또한 내 지식 중 가장 좋은 점에 관해서는 내게 의미가 없습니다 .RestoreInstanceState는 당신을 위해 아무것도하지 않습니다. 당신은 손으로 각 요소를 복원해야합니다. –
나는 그것을 지금 찾을 수 없다. 그것은 대담한 서신으로 그것을 말하기 위해 사용되었습니다 (비슷한 질문을 올린 8 월에 최근에). 이것은 지금 당황 스럽지만, 최근에 체크하지 않았기 때문에 구현을 변경했을 수도 있습니다. 그것은 사실 (예 : http://stackoverflow.com/q/6045361/3973077 여러 다른 사람들이 같은 문제를 발견하는 것을 보았습니다.)이었습니다. 전문가가 무슨 일이 일어나는지 확인할 수 있다면 고맙겠습니다. –
이것은 onRestoreInstanceState()의 문서에 없었습니다.'View'에서의 그 메소드의 기본 구현은'IllegalStateException'을 저장하고 예상되는 다른 구체적인 매개 변수로 호출되면 그 효과에 메시지를 던지도록 설계되었습니다 :'BaseSavedState.EMPTY_STATE'. 이것은 일반적으로 커스텀'View'에서 메소드를 잘못 구현함으로써 발생합니다. – corsair992