web-dev-qa-db-ja.com

Android:なぜロングクリックも通常のクリックをトリガーするのですか?

長いクリックと通常のクリック用のリスナーを備えたリストビューがあります。

リストアイテムを長押しすると、通常のクリックイベントも呼び出されるのはなぜですか?

クリックごとに異なる2つの機能が必要です。

114
mellowg

から イベントリスナー

onLongClick() -これは、イベントを消費したかどうかを示すブール値を返します。これ以上イベントを実行しないでください。つまり、trueを返して、イベントを処理し、ここで停止する必要があることを示します。処理していない場合やイベントが他のオンクリックリスナーに続く場合はfalseを返します。

onLongClick()からtrueを返しても、通常のクリックイベントが発生しますか?

addに編集:ListViewの場合、OnItemLongClickListenerを使用している可能性があります。 onItemLongClick() は、同様のブール戻り値を使用して、イベントを消費したかどうかを示します。

262
erichamion

答えを簡単な言葉で言い換えると:

与えられた:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return trueは、イベントが消費されることを意味します。取り扱われます。他のクリックイベントは通知されません。
  • return falseは、イベントが消費されないことを意味します。その他のクリックイベントは引き続き通知を受信します。

onClickの後にonLongClickもトリガーされたくない場合は、return trueonLongClickイベントから。

40
Suragch

OnClickListenerメソッドのonClickをオーバーライドしていることを確認してください。また、OnLongClickListenerメソッドのonLongClickをオーバーライドしていることを確認してください。 onLongClickを消費するため、trueメソッドがonClickを返すことを確認してください。

18
Alex Lockwood