Android : 왜 긴 클릭이 정상적인 클릭을 유발합니까?


126

긴 클릭과 일반 클릭에 대한 리스너가있는 ListView가 있습니다.

목록 항목을 길게 누르면 일반 클릭 이벤트도 호출되는 이유는 무엇입니까?

다른 클릭에 대해 두 가지 별도의 기능이 필요합니다.

답변:


284

에서 이벤트 리스너 :

onLongClick () -이벤트를 소비했는지 더 이상 전달해서는 안되는지 여부를 나타내는 부울을 반환합니다. 즉, 이벤트를 처리했으며 여기서 중지해야 함을 나타내려면 true를 반환합니다. 처리하지 않았거나 이벤트가 다른 온 클릭 리스너로 계속되어야하는 경우 false를 반환합니다.

당신은 반환하는 true당신의에서 onLongClick()여전히 정상적인 클릭 이벤트를 받고?

추가 편집 : ListView의 경우 OnItemLongClickListener. 는 onItemLongClick()이 이벤트를 소비 여부를 나타내는 유사한 부울 반환 값이 사용합니다.


1
myListView.setOnItemLongClickListener(this); 옵션을 설정하려면 기능을 재정의해야합니다 public boolean onItemLongClick(...). 여기 return true에서 LongClick이 활성화되었음을 나타내기만하면 일반 클릭에 대한 트리거가 취소됩니다. false를 반환하면 일반 클릭도 트리거됩니다.
Brandon

그에 따라 조치를 취하기 위해 긴 클릭과 일반 클릭을 다르게해야 할 때 다른 상황은
어떻습니까

@erichamion 나는 운이없는 비슷한 문제에 대한 해결책을 시도했습니다. 여러분이 제공 할 수있는 통찰력이나 생각이 있으면 감사하겠습니다. stackoverflow.com/questions/47783631/…
AJW

49

더 간단한 용어로 답변을 다시 작성하십시오.

주어진:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return true이벤트가 소비되었음을 의미합니다. 취급합니다. 다른 클릭 이벤트는 통지되지 않습니다.
  • return false이벤트가 소비되지 않음을 의미합니다. 다른 모든 클릭 이벤트는 계속해서 알림을받습니다.

그래서 당신은 원하지 않는 경우 onClick도 후 트리거 될 onLongClick, 당신은해야 return true로부터 onLongClick이벤트입니다.


2
우리는 우리가 거짓 넣어 경우에만 처리 긴 다음을 클릭하고 긴 프레스 이벤트를 모두 한 번에 발생하는 클릭 진정한 가치를 넣으면 슈퍼 완벽한 해답
PIR 파힘 샤

훌륭한 대답입니다.
Sam Chen

20

메서드를 재정의 OnClickListener하고 있는지 확인하십시오 onClick. 또한이 무시되어 있는지 확인 OnLongClickListener당신을위한 onLongClick방법. 그리고 확인하십시오 있는지 확인 onLongClick메소드가 리턴 true이 같은이의 소모됩니다 onClick.


내 onLongClick 메서드에 true를 추가했지만 그 후에 onClick 메서드가 실행되지 않는다는 문제가 여전히 있습니다. 해결 방법에 대한 생각이나 아이디어가 있으면 감사하겠습니다. 여기에 있습니다. stackoverflow.com/questions/47783631/…
AJW

0

또는 setOnLongClickListener의 인스턴스 생성 을 구현할 수 있습니다 . Long click을 생성하고 일반 OnclickListener를 구현하면 메서드를 활성화하는 한 번의 클릭으로이 오류가 발생합니다. 긴 클릭 만 포착하는 데 사용해야 합니다.new View.OnClickListener()new View.OnLongClickListener()new View.OnLongClickListener()

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.