Android:長いクリックでも通常のクリックがトリガーされるのはなぜですか?


126

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

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

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

回答:


284

イベントリスナーから:

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

元に戻っtrueonLongClick()も、通常のクリックイベントが発生しますか?

追加用に編集:リストビューの場合、を使用してOnItemLongClickListenerいる可能性があります。onItemLongClick()それはイベントを消費するかどうかを示すために、同様のboolean型の戻り値が使用されます。


1
myListView.setOnItemLongClickListener(this); オプションを設定するには、関数をオーバーライドする必要がありますpublic boolean onItemLongClick(...)。ここreturn trueでは、LongClickがアクティブ化されたことを示し、通常のクリックでトリガーをキャンセルする必要があります。falseを返すと、通常のクリックもトリガーされます。
ブランドン

それに従ってアクションを実行するためにロングクリックと通常のクリックを
区別

@erichamion私は同様の問題に対してあなたの解決策を試しましたが、運がありませんでした。ここにある、あなたに提供できる洞察や考えがあれば幸いです。stackoverflow.com
questions

49

より簡単な言葉で答えを言い換えます:

与えられた:

@Override
public boolean onLongClick(View view) {

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

したがって、のonClick後にもトリガーされたくないonLongClick場合はreturn trueonLongClickイベントから行う必要があります。


2
私たちが真の値を入れれば、それはロングクリックのみを処理し、falseを入れれば、クリックと長押しの両方のイベントが同時に発生します
Pir Fahim Shah

すばらしい答えです。
Sam Chen

20

メソッドをオーバーライドOnClickListenerしていることを確認してくださいonClick。またOnLongClickListeneronLongClickメソッドをオーバーライドしていることを確認してください。そして、これがを消費するので、onLongClickメソッドが戻ることを確認してください。trueonClick


onLongClickメソッドにtrueを追加しましたが、その後onClickメソッドが起動しないという問題があります。ここにある解決方法についての考えやアイデアをいただければ
幸いです。stackoverflow.com

0

またはのsetOnLongClickListenerインスタンスの作成を実装できます。ロングクリックを作成し、通常のOnclickListenerを実装すると、メソッドをアクティブにするシングルクリックのこのエラーが発生します。長いクリックだけをキャッチするために使用する必要がありますnew View.OnClickListener()new View.OnLongClickListener()new View.OnLongClickListener()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.