2012-11-23 2 views
1

include/merge를 사용하여 XML 파일을 다른 XML 파일에 포함 할 수 있음을 알고 있습니다. 포함 된 레이아웃에 자식이 포함되어 있고 루트보기에이 인스턴스가 여러 개 포함되어있는 경우 각 자식 인스턴스의 ID는 어떻게 찾을 수 있습니까?포함 된 XML에서 하위 뷰 참조

예를 들어 포함 된 레이아웃에 listview가 있고이 레이아웃의 인스턴스를 루트 레이아웃에 3 개 포함하면 3 개의 listview 하위를 어떻게 찾고 참조합니까?

업데이트 : 이 스레드를 읽는 사람들을 위해 : 내가 실제로 발견 한 훨씬 더 좋은 해결책이 있으며, 매우 분명합니다. getChildAt()의 문제는 새 뷰를 추가하거나 사물을 재정렬하면 자식 인덱스가 변경되어 클래스 유형이 더 이상 일치하지 않을 수 있기 때문에이 코드가 충돌하거나 작동하지 않는다는 것입니다. 그렇게 유지하기가 쉽지 않습니다. findViewById()는 레이아웃에 좀 더 자세히 드릴 다운하고 각 include에 ID를 제공하는 경우 잘 작동합니다. 예를 들어, "list_container1", "list_container2"및 "list_container3"ID 이름을 가진 레이아웃에 3 개의 포함이 있다고 가정합니다. 이들 각각은 동일한 ID 이름을 가진 동일한 목록보기 XML을 포함합니다. 대신 첫째, 작업 컨테이너를 찾을 수 없습니다 루트 레이아웃에서 목록을 찾기 위해 노력하는 자, 다음과 같이 목록을 찾을 수 있습니다 : 위의 예에서

myRootLayout = (LinearLayout) findViewById(R.id.root_layout); 
container1 = (LinearLayout) myRootLayout.findViewById(R.id.list_container1); 
list1 = (ListView) container1.findViewById(R.id.my_list_view); 
container2 = (LinearLayout) myRootLayout.findViewById(R.id.list_container2); 
list2 = (ListView) container2.findViewById(R.id.my_list_view); 
container3 = (LinearLayout) myRootLayout.findViewById(R.id.list_container3); 
list3 = (ListView) container3.findViewById(R.id.my_list_view); 

를, 레이아웃 관계의 계층 (이 같다 더 단순화 될 수 있습니다.)

LinearLayout 
    <include> 
     LinearLayout 
      ListView 
    <include> 
     LinearLayout 
      ListView 
    <include> 
     LinearLayout 
      ListView 
+0

각 포함을 실제 내용으로 바꾸는 것이 다른 이유는 무엇입니까? – fiddler

+0

문제는 문자 그대로 3 번 포함하기 때문에 모든 어린이가 동일한 ID를 갖고 있다는 것입니다. 아래의 답이 올바른 것입니다. – Batdude

+0

하지만 아무 것도 포함하지 않고 동일한 ID를 3 번 ​​사용하지 못하게하는 것은 없습니다. 이것은 내가 생각하는 것을 포함하는 것과 상관없는 신분증 문제입니다. – fiddler

답변

0

루트 레이아웃의 getChildAt(int index) 방법을 사용하여 모든 하위 항목으로 이동할 수 있습니다. 실제로 findViewById()은이 코드를 사용하여 getChildCount()을 사용하여 주어진 id와 일치 할 때까지 모든 레이아웃의 자식 뷰를 반복합니다.


예 :

LinearLayout layout = (LinearLayout) findViewById(R.id.rootLayout); 
ListView list1 = (ListView) layout.getChildAt(0); 
ListView list2 = (ListView) layout.getChildAt(1); 
ListView list3 = (ListView) layout.getChildAt(2); 

정확한 지수는 당신이 당신의 레이아웃을 정렬 한 방법에 따라 달라집니다.

관련 문제