-
[Android Studio] ListView에서 Click과 LongClick을 동시에 사용하고 싶을때
LongClick 이벤트가 발생한 경우 Click 이벤트 무시
브로마입니다. 안드로이드 스튜디오 개발 도중, AlertDialog를 dismiss하지 않고 Activity를 finish() 했을때 뜨는 에러가 나기 시작했습니다. android.view.windowleaked 이 에러를 마주하고 도대체 뭐가 문제인가 한참을 고민해보았는데, 자세히 들여다보니 "OnItemClickListener" 부분에 finish() 가 들어가 있었고 "OnItemLongClickListener" 부분에서 AlertDialog를 띄워주니 AlertDialog가 뜨자마자 OnItemClickListener에 있는 finish가 호출되어 위의 에러를 발생시키고 있었습니다.
우리는 대개 Click 이벤트와 LongClick 이벤트를 각각 설정해줄때, 두개가 동시에 작동하는 것을 원치 않습니다. 일반적인 클릭 이벤트는 Click으로 그리고 길게 눌렸을땐, LongClick 이벤트만 실행되기를 원하죠. 이와 같은 방법을 구현하는 것은 매우 간단합니다.
1234567891011121314listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){@Overridepublic boolean onItemLongClick(AdapterView parent, View v, int position, long id){Log.d("LONG CLICK", "OnLongClickListener");return true;}});listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){@Overridepublic void onItemClick(AdapterView parent, View v, int position, long id){Log.d("CLICK", "OnClickListener");}});cs 들어간 변수의 이름은 상황에 따라 변경해주시면 될 것 같고 핵심 부분은 바로 5번째 줄의 return true; 입니다. OnItemLongClickListener에서 true 값을 반환해줄 경우 OnItemClickListener의 이벤트는 호출되지 않습니다.
LongClick에도 일반 Click의 이벤트도 동시에 실행시켜주고 싶은 경우엔 return false; 를 사용하면 됩니다.
'프로그래밍 > Android Studio' 카테고리의 다른 글
[Android Studio] 안드로이드 설정 언어, Locale 의 모든 것 (0) 2020.07.06 [Android Studio] TextView 글씨 사이즈 변경하는 방법 (1) 2020.07.06 [Android Studio] 안드로이드 실행중인 앱, 액티비티 종료하기 (0) 2020.06.25 안드로이드 6.0 target sdk version 28 useLibrary 'org.apache.http.legacy' 알 수 없는 강종현상 해결 방법 (0) 2020.06.25 구글 플레이 기기 및 네트워크 악용 정책 관련 정보 해결하여 구글 승인 받기 (0) 2020.06.25