왜 ListView?setOnItemClickListener, setOnCreateContextMenuListener가 올바르지 않습니다.

1615 단어 contextMenu
ListView의 단일 Item의view에 checkbox,button 등view가 존재하면ListView를 만들 수 있습니다.setOnItemClickListener가 잘못되었습니다.
사건은 View에 의해 포착되며, ListView는 이 사건을 포획하여 처리할 수 없습니다.
해결 방법:
checkbox,button에 대응하는view에android:focusable="false"android:clickable="false"android:focusableInTouchMode="false"추가
그중에 포커스가 관건이에요.
On Click Listener에서 get Selected Item Position () 을 호출하면 클릭과 selection은 상관없고, Selection은 D-pad or trackball을 통해 조작되며, 클릭은 보통 클릭으로 조작된다.
arg2 파라미터야말로 이벤트 위치를 클릭하는 파라미터이다
두 번째 방법은 바로 자신의 getView에서
convertView = mInflater . inflate ( R . layout . list_item_text , null );  
convertView . setClickable ( true );  
convertView . setOnClickListener ( clickListener );  
public OnClickListener myClickListener = new OnClickListener () {  
public void onClick ( View v ) {  
                  //code to be written to handle the click event  
    }  
};  
 
 
방금 인터넷에서 문제의 관건을 찾았는데, 마침내 해결되었다.
 
사용자 정의ListViewItem에 Button이나 Checkable의 하위 클래스 컨트롤이 있다면 기본 포커스는 하위 컨트롤에 맡기고, ListView의 Item이 선택되는 기초는Focus를 가져오는 것입니다. 즉,ListView에 포함된 모든 컨트롤의 포커스able 속성을false로 설정할 수 있습니다.이렇게 하면ListView의 Item은Focus의 권한을 자동으로 얻고 선택될 수 있으며 onItemClickListener의onItemClick() 방법에 응답할 수 있습니다. 그러나ListView의 Item Layout의 하위 컨트롤인focusable 속성을false로 설정하는 것은 좀 번거롭습니다. Item Layout의 루트 컨트롤인android:descendantFocusability="blocks Descendant"로 설정하면 됩니다.이렇게 하면 Item Layout은 모든 하위 컨트롤이Focus를 얻는 권한을 차단하고 Item Layout의 모든 컨트롤에 대해focusable 속성을 다시 설정할 필요가 없다. 그러면 onItem ClickListener의 onIten Click () 방법에 순조롭게 응답할 수 있다.

좋은 웹페이지 즐겨찾기