Android의 다른 레이아웃에서 동일한 ID를 사용할 수 있습니까?


90

저는 Android 개발이 처음입니다. 이미지와 TextViews다른 LayoutXML 파일 에 동일한 ID를 사용해도 괜찮 습니까?

eclipse가 나를 위해 자동으로 나열하면 프로젝트의 모든 레이아웃 변수가 나열되므로 충돌할까요? 지금까지 다른 레이아웃에서 동일한 ID를 사용하는 데 어떤 문제도 발견하지 못했지만 장기적으로는 걱정됩니다.



@Pavel 제약 조건을 조정하려면 여전히 ID가 필요합니다.
Sadda Hussain 19-07-15

답변:


96

레이아웃마다 다른 ID를 사용하는 것이 좋습니다. 장기적으로 레이아웃이 많고 ID가 많으면 구분하기가 매우 복잡해집니다.

나는 보통 다음과 같이 내 ID의 이름을 지정 layoutName_elementId합니다.

특히 자동 완성 기능을 사용할 때 찾고있는 ID를 쉽게 찾을 수 있습니다 (작업중인 레이아웃은 알고 있지만 ID는 실제로 모릅니다.이 경우에는 이름 지정 전략을 사용하여 레이아웃 이름 만 입력하면 해당 레이아웃의 모든 ID가 표시됩니다.

레이아웃 및 ID에 대한 자세한 정보는 여기 에서 찾을 수 있습니다 .

즐거운 코딩,


2
당신의 ok_button모든 활동 에서 말하자 찾고의 문제는 무엇입니까 ? 원하는 채팅을 알고 있다면 자동 완성이 더 명확 해집니다.
Dan Chaltiel

132

짧은 대답 : 예, 가능합니다.

긴 답변 : 레이아웃의 일부에 대한 참조를 얻기 위해 findViewById ()를 사용할 때마다 메서드는 현재 부풀린 레이아웃에서만 해당 뷰를 검색하기 때문에 이렇게 할 수 있습니다. 따라서 다른 레이아웃에 동일한 ID를 가진 다른 뷰가 있어도 Android는 해당 뷰를 찾지 않습니다.


15
더 긴 답변을 드릴 수 있습니까? R.id.layout_id는 정적 정수이고 컴파일 타임에 미리 결정되므로 findViewById ()는 현재 부풀려진 레이아웃을 알 수 없습니다.
Chloe

22
이 질문을하는 다른 사람을 위해 클로이의 요청에 답하고 싶었습니다. ID는 각보기에서 동일하지만 동일한 활동에서 두 번 표시되지 않습니다. 은유로, 내가 당신에게 많은 숫자가 적힌 종이 더미를 주면 어떻게 될지 생각해보십시오. 이 종이 몇 장에는 숫자 4가 적혀 있습니다. 당신은 시트 중 하나를보고 있는데 4에 동그라미를 치라고 요청합니다. 이것은 쉽습니다. 이제 4가있는 다른 시트를 봅니다. 그것도 찾아서 동그라미를 칠 수 있습니다. 숫자가 미리 정의되어있는 것은 중요하지 않습니다.
Ted Cannelongo 2014

6
Ted의 의견에 동의하지 않습니다. 동일한 활동에서 동일한 ID를 가진 두 개의 구성 요소를 동시에 가질 수 있습니다. 방금 앱에 문제가 있었는데 주요 활동에서 동시에 두 개의 다른 ViewPager를 사용하고있었습니다. 현재 ID와 함께 표시된 ViewPager를 검색하려고 시도했을 때 실제로 백그라운드에서 실행중인 다른 하나를 검색했습니다. 두 ID를 고유하게 만들어 문제를 해결했습니다.
Yoann Hercouet

8
나는 모두 동일한 시트 (활동)에 있었기 때문이라고 생각 @YoannHercouet
Naheel

22

개발자 API 가이드에 따르면 :

ID는 전체 트리에서 고유 할 필요는 없지만 검색중인 트리 부분 내에서 고유해야합니다 (종종 전체 트리 일 수 있으므로 가능하면 완전히 고유하는 것이 가장 좋습니다).

따라서 짧은 대답은 필수는 아니지만 가능한 충돌을 피하는 것이 좋습니다.


1
우연히 같은 ID를 만든 적이 있습니다. 나중에 이름을 변경하지 않는 것은 모든 인스턴스가 다시 조정 되었기 때문에 많은 작업이었습니다. 즉, ID 충돌이 발생하면 망가집니다. 모든 것을 다시 분리하는 것은 매우 어려울 것입니다.
t3chb0t

@ t3chb0t 진짜! "로컬 전용"을 선택하더라도 Android Studio는 모든 인스턴스의 이름을 바꿉니다. 그것은 절대적으로 우스꽝 스럽습니다.
John Glen

15

권장하지 않습니다. 나중에.을 리팩터링해야하는 view id경우 Android 스튜디오가 모든 XML파일과 클래스 에서 리팩터링하여 문제가 발생할 수 있기 때문 입니다.

그러나 id일부 추상이 있고 여러 레이아웃을 재사용하는 경우 와 같이 동일하게 사용해야하는 경우도 있습니다.

프로젝트에 views동일한 항목 이 여러 개 있고 id's리팩터링해야하는 경우 수동으로 수행하고 IDE 기능에서 빌드를 사용하지 않고 레이아웃 id내부의 대상보기에서 변경 XML한 다음 레이아웃 내부 의 빨간색 오류를 수정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.