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
각 포함을 실제 내용으로 바꾸는 것이 다른 이유는 무엇입니까? – fiddler
문제는 문자 그대로 3 번 포함하기 때문에 모든 어린이가 동일한 ID를 갖고 있다는 것입니다. 아래의 답이 올바른 것입니다. – Batdude
하지만 아무 것도 포함하지 않고 동일한 ID를 3 번 사용하지 못하게하는 것은 없습니다. 이것은 내가 생각하는 것을 포함하는 것과 상관없는 신분증 문제입니다. – fiddler