2012-12-14 3 views
1

두 개의 서로 다른 레이아웃에서 두 개의 서로 다른보기에 대해 동일한 ID를 사용하는 경우, R의 "id"클래스에있는 ID에 대해 하나의 참조 만 작성되었다고 가정합니다 .자바. 사실 내가 생각하기에 오류가 나타나지 않습니다. 빌드에서 "id"클래스에 같은 이름의 상수를 추가하려고하면 오류가 발생합니다. 오류가 표시되지 않는 이유는 무엇입니까? 그리고 두 ID가 서로 다른 두 개의 뷰를 식별하는 방법은 무엇입니까?R.java- android에서 중복 된보기 ID의 작업

+0

xml 자체에 경고 (노란색 밑줄이 표시됨)가 표시됩니다. –

+0

가능한 복제 http://stackoverflow.com/questions/6201517/how-can-i-use-duplicate-ids-in-different-layouts –

답변

6

두 명의 서로 다른 그룹에 이름이 모두 Vicky 인 경우 이름 (= id)을 호출 할 사람이 누구인지는 중요하지 않습니다. 첫 번째 그룹에서 'Vicky'라고 부르면 THAT 그룹의 Vicky가 응답합니다. android에서 setContentView(<layout file>)을 사용하여 활동에 '그룹'보기를 할당합니다. 여기서 <layout file>은 그룹입니다. findViewWithId()에서로드 된 레이아웃 파일이 아닌 것처럼 사용할 수없는 ID로 뷰를 요청하면 null을 반환합니다.

예 :

layout1.xml는 layout2.xml는, 제 1 및 제 2 레이아웃 파일에 findViewById(R.id.name1)를 호출

<View id="@+id/name1"/> 
<View id="@+id/name3"/> 

이 들어있는 첫 번째보기를 반환합니다

<View id="@+id/name1"/> 
<View id="@+id/name2"/> 
<View id="@+id/name3"/> 

이 포함되어 있습니다. 그러나 두 번째 레이아웃에서 findViewById(R.id.name2)으로 전화하면 null을 반환합니다. id는 레이아웃 파일에 존재하지만 '로드 된'레이아웃 파일에는 존재하지 않습니다.

ID는보기 개체에 대한 참조가 아닙니다. 그것들은 다른 레이아웃의 여러 뷰에서 사용할 수있는 식별자입니다. 레이아웃 파일에서 식별자를 찾으면 뷰를 사용하여 뷰에 대한 참조를 얻을 수 있습니다.

0

두 개의 서로 다른보기에 대해 동일한 문자열을 사용하는 경우 하나의 ID 만 생성되고 동일합니다. RelativeLayouts에서는 @ + id를 여러 번 사용할 수 있고 동일한 ID를 참조 할 수 있기 때문에 RelativeLayouts에서 매우 유용한 기능입니다. 뷰 자체에는 고유 ID가 있어야하지만 ID는에서 참조 할 수 있습니다. 레이아웃 문.

이것은 설계된 방식이며 오류가 아닙니다.

+0

그런 다음 동일한 ID로 서로 다른 두 개의보기를 식별하는 방법. – siraj

+0

RelativeLayouts에 사용할 설명이 추가되었습니다. 레이아웃 내에서 각 ID는 분명히 고유해야합니다. findViewById는 현재 레이아웃에서만 작동하므로 반환 된보기가 올바른 것입니다. – 323go

1

동일한 파일에없는 다른 xml 개의 파일에있는보기 ids에 대해 동일한 문자열 이름을 사용할 수 있습니다. 그리고 그것은 컴파일러가 서로 다른 레이아웃 내에서 서로 다른 뷰를 구별하는 방법입니다.

+0

k.하지만 우리는 단지 R.id.viewId의 견해를 찾고 있습니다. 우리는 어떤 레이아웃도 언급하지 않고 있습니다. 어떻게 작동합니까? – siraj

+0

활동에서 예를 들어 R.layout.main과 같은 고유 한 레이아웃을 사용하고 있기 때문에 –

+0

또는 레이아웃이 부풀어있는 경우에도 view.finedViewbyID (R.id.some_id)와 같은보기가 표시됩니다. 그래서 항상 조회수를 얻고 있습니다 특정 XML로부터 –