2013-07-31 1 views
0

프로그래밍 방식으로 인스턴스를 만들고 ViewPager에 ID를 할당하는 ViewGroup이 있습니다. 회전 할 때 "위로"버튼과 화면 방향을 변경하면 뷰가 다시 생성되지만 ViewPager의 마지막 페이지 인덱스는 기억되지 않습니다.프로그래밍 방식으로 설정된보기 ID에 OnRestoreInstanceState()가 적용되지 않았습니다.

OnSaveInstanceState() 및 OnRestoreInstanceState()가 호출되고 있고 둘 다 올바른 페이지 인덱스 정보가 포함되어 있는지 확인했습니다. 하지만 ViewPager는 페이지 인덱스를 0으로 재설정하지 않습니다. 내가 콘솔 실험으로

No package identifier when getting name for resource number [id that I programmatically defined]

내가 메시지가 통지, 나는 XML에 (아이디과 함께) ViewPager를 정의했다. ViewPager를 마지막 페이지 인덱스로 올바르게 설정합니다.

그래서, ViewGroup이 ViewPager가 삭제 될 때 ID가 유지되지 않기 때문에 Android 프레임 워크가 실제로 마지막 상태를 올바르게 복원 할 수 없다고 생각합니다.

어떻게 작동합니까? 이 ViewGroup 내 모든 상태 관련 항목을 포함하고 싶습니다 (예 : Fragment에서 ViewPager 위치를 추적하지 마십시오). 그러나 ID를 계속 유지하지 않으면 작동하지 않는 것처럼 보입니다 (근본 원인 인 경우).

+1

'ViewGroup'의 onSave/onRestoreInstanceState 메소드를 사용하여 사용자가 직접 위치를 저장할 수 없습니까? 저는 사용자 정의 클래스를 사용한다고 가정합니다. – Luksprog

+0

@Luksprog 예,하지만'ViewPager.setCurrentItem (position, false) '호출이 실제로 적용되지 않는 또 다른 문제가 있습니다.ViewPager가 자신의'OnRestoreInstanceState()'를 호출하게함으로써 페이지 인덱스를 올바르게 설정할 수 있습니다. – cheezy

답변

0

편집 : 내 코드에 경쟁 조건이 있습니다. 고유 한 ID를 가지고 있는지 확인한 후 완벽하게 작동했습니다.

(이상한 이유로) 10 미만의 ID는 ViewPager의 OnRestoreInstanceState()에 잘못된 인스턴스 데이터 (다른보기의 가능성 있음)를 반환합니다.

ID가 고유하기 때문에 ID를 설정하기 전에 FindViewByID을 사용했기 때문에 정말 이상합니다. 그러나, 내가 놓치고있는 경쟁 조건이나 무언가가있을 수 있습니다.

어쨌든 ID를 10 이상으로 설정하면 올바른 동작이 발생하고 방향 변경간에 ViewPager의 위치가 유지됩니다.

0

OP의 게시물에서 2 년이 지났지 만, 이후 사람들에게 가능한 문제를 언급 할만한 가치가 있다고 생각합니다.

OP의 원래 게시물에서 프로그래밍 방식으로 설정 한 ID를 복원하려면 뷰의 ID를 부모 수준으로 저장해야합니다. 따라서 복원 할 때 부모는 뷰를 다시 만들고 복원 된 ID를 새 뷰로 다시 설정합니다. 이렇게하면 구성을 변경하기 전에이보기에 저장 한 모든 데이터를 복원 할 수 있습니다.

OP 자신의 대답을 내 생각 엔 동일한 ID를 여러보기에 할당하는 것입니다. 예를 들어보기 A와보기 B가 있고 실수로 같은 ID를 둘 다 설정했습니다. 나중에 구성 변경 후보기 A에서 저장된 상태를 복원하려고 할 때 B의 저장된 상태가 복원되었을 것입니다. 따라서 잘못된 인스턴스 데이터가 나타납니다. 참고 B는 일반적인보기가 아니며 메뉴 항목이거나 OS가보기로 간주하는 항목 일 수도 있습니다. 두 번째보기 (B)의 ID가 10보다 작아서이 값을 10보다 크게 설정 한 솔루션이므로 이번에는 운이 좋을 것입니다. 코드를 파헤 치고 제가 실수 한 것과 동일한 실수를했는지 확인하십시오.

+0

이 종류의 주석은 대부분 다른 게시물을 다루기 때문에 주석처럼 보이지만 전체 솔루션, 맨 아래쪽, 그리고 특정 파트가 필요한 이유를 설명하여 독립 실행 형으로 재 작업 할 수 있다고 생각합니다 (명시 적으로 다른 대답을 언급하지 않고) . –

+0

@NathanTuggy 가능한 경우 덧글을 추가하고 싶습니다. 내 계정이 새 것이고 "코멘트 권한"을 얻기에 충분한 평판을 얻지 못했습니다 ... 다른 사람들이 같은 문제에 부딪히면 도움을주기 위해 노력하고 있습니다. – yongsunCN

관련 문제