English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
일반적인 개발 과정에서는 ListView가 단순한 텍스트나 버튼을 표시하는 것 이상으로 복잡한 레이아웃을 표시할 수 있습니다. 이렇게 되면 우리는 자신의 레이아웃과 커스텀 Adapter를 작성해야 하며, 일반적으로 BaseAdapter를 상속받습니다. 예제 코드는 아래에 있습니다. ListView의 클릭 이벤트를 작성할 때 OnItemClickListener, onItemClick 메서드가 실행되지 않아 ListView의 Item 항목 클릭 이벤트가 비활성화되었습니다. Item 내 View의 클릭 이벤트는 getView 메서드에서 처리할 수 있습니다. 전체 Item 클릭이 비활성화된 이유는 대부분 자신이 정의한 Item에 ImageButton, Button, CheckBox와 같은 서브 컨트롤이 있는 경우로, 이러한 서브 컨트롤이 포커스를 받게 되어 있어서 클릭할 때 항목의 서브 컨트롤이 변하는 것이 일반적입니다. 항목 자체의 클릭은 응답하지 않습니다.
이제 descendantFocusability를 사용하여 해결할 수 있습니다. descendantFocusability와 관련된 속성은3개
이 속성은 View가 포커스를 받을 때, ViewGroup과 그 자식 컨트롤 간의 관계를 정의합니다.
속성 값은 세 가지가 있습니다:
beforeDescendants: ViewGroup은 자식 컨트롤보다 우선하여 포커스를 받습니다.
afterDescendants: ViewGroup은 자식 컨트롤이 포커스를 받지 않을 때만 포커스를 받습니다.
blocksDescendants: ViewGroup은 자식 컨트롤을 덮어써서 직접 포커스를 받습니다.
보통 사용하는 것은 세 번째 방식으로, Item 레이아웃의 root 레이아웃에 android:descendantFocusability="blocksDescendants" 속성을 추가하면 됩니다.
저의 상황은 item 레이아웃에 ImageButton 버튼이 있으며, 이 컴포넌트는 이벤트 처리 능력이 강하며, root button과 비슷합니다. 따라서 실행 후, listViewItem 클릭이 비활성화됩니다. 위의 방식으로 문제를 해결할 수 있습니다. 물론 ImageButton을 imageView로 변경하여도 이 문제를 해결할 수 있습니다.
언급: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않으며, 관련 법적 책임을 부담하지 않습니다. 저작권 위반이 의심되는 내용이 있다면, 이메일을 notice#w로 보내 주세요.3codebox.com(이메일을 보내면, #을 @으로 변경하십시오. 신고를 하고, 관련 증거를 제공하십시오. 실제로 확인되면, 이 사이트는 즉시 위반 내용을 삭제합니다。)