2012-10-18 3 views
6

하나의 RadioGroup에 두 개의 RadioButton, ids @+id/radioButton1@+id/radioButton2이있는 사용자 정의 구성 요소가 있습니다. 반면에 5 개의 탭이있는 TabActivity가 있습니다. 각 탭에서이 구성 요소는 두 번 이상 사용됩니다.동일한 ID가 복원 될 때 동일한 attrs를 얻는 뷰

오리엔테이션이 변경되고 활동이 다시 생성 될 때 모든 RadioButton에 동일한 attrs가로드되는 문제는 android:text, android:margin 및 내가 만든 스타일 첨부 attrs를 포함합니다. 동일한 ID를 갖는 모든 CheckBox에서도 발생합니다.

왜 이런 일이 발생했는지 알아 내려고 노력하면서 android가 onRestoreInstanceState에서이를 수행하고 있다고 결론을 내 렸습니다. super 메소드를 호출하는 라인에 주석을 달면 잘 동작합니다.

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    // super.onRestoreInstanceState(savedInstanceState); 

} 

이것이 원래 어떻게 되겠습니까? 또는 이것을 일으킬 수있는 사람은 무엇입니까?

사용자 지정보기를 만들 때 동일한 ID를 가진 동일한보기를 사용하여 동일한 레이아웃을 확장하므로 정상적인 동작이 아닌 것으로 짐작합니다. 따라서 매번 자식마다 다른 ID를 생성하는 새로운 사용자 정의보기를 인스턴스화 할 수 없습니다. 위의 코드 또는 android:configChanges을 매니페스트에 사용하면 나에게 나쁜 해결책이되는 것 같습니다. 그래서, 어떤 도움을 주셔서 감사합니다.

+0

은. 최악의 부분은, 내 경우에는, 이러한 견해는 잘못된 값을받을 수있다 뷰가 나타내는 상태의 변경이 즉시 발생하여 상태가 손상됩니다. SeekBar를 다른 그룹과 그룹화하는 사용자 정의 뷰에 포함 된 SeekBar에서이 동작이 나타납니다 구성 요소. 사용자 지정보기를 Activity의 여러 위치에서 재사용하고 물론 XML 파일을 다시 사용할 수있는 것은 좋습니다. –

답변

1

오랫동안 설명을 검색 한 후 사용자 정의보기는 언급하지 않았지만 마침내 안드로이드 Google 그룹의 Romain Guy에서 훌륭한 것을 발견했습니다.

"그것은 ID가 툴킷은 단순히 이 두 개의 뷰가 동일한 지 생각 때문에 자신의 상태가 저장 될 때 뷰를 식별하는 것을 입니다. 당신은 자신의 상태를 저장하기 위해 뷰를 필요로 할 때를 제외하고 동일한 ID를 사용하는 것이 괜찮습니다.하지만 그건 활동 만 내 참. "

"당신이 무엇을 조심있어 경우 같은 활동 내에서 동일한 ID를 사용하여 아무 문제가 없다가 두 개의 서로 다른 활동에서 동일한 ID를 사용하여 아무 문제가 없다. 그리고 ' (예 : 공유 ID가있는 보기가 어떤 상태도 저장할 필요가없는 경우) 왜냐하면 귀하의 경우에는 이 s가 탭 집합의 일부인 경우 실제로는 이 고유 컨텍스트에 연결되어 있으므로 공유 ID와 관련된 문제가 발생합니다. "

Here's the link. 나는이 너무. 사실, 내가 다운이 버그를 추적하려고 며칠을 보냈다 경험했던

+1

외부 리소스에 연결하는 것보다 여기에 관련된 작은 부분을 포함시켜야합니다. 링크만으로는 부패 할 수 있으며 좋은 대답이 아닙니다. – slugster

1

savedInstanceState 메소드의 모양은 무엇입니까?

라디오 버튼 텍스트에 할당 된 변수가 방향 변경 사이에 지속되지 않는 것이 좋습니다. 오리 엔테이션이 변경되면 활동이 완전히 재구성/재개됩니다.

+0

onSaveInstanceState 메서드를 재정의하지 않습니다 .t를 사용하여 동일한 ID로보기를 다시로드하지 않도록 onRestoreInstanceState 만 재정의합니다. 그는 같은 AttributeSet입니다. –

+0

radiobuttons 텍스트가 내 사용자 정의보기의 마지막 항목 값을 수신하고 있습니다. 안드로이드가보기 상태를 ID (예 : savedInstanceState 번들에서)와 연관시키는 전체 레이아웃을 스윕하고있는 것과 같은 모든보기에 대해이 상태를로드하는 것과 같습니다. 그것이 연결된 이드. –

+1

레이아웃 랜드 폴더를 만들고 같은 레이아웃 xml 파일을 복사하여 대체 가로 레이아웃 파일을 만들려고 했습니까? Android는 기기 방향에 따라 두 기기를 자동으로 전환합니다. 이로 인해 장치는 "새로운"정보로보기를 다시 작성해야합니다. –

관련 문제