2012-04-20 5 views
2

タイトルのとおりです。私がイベントを消費することができないという事実は、すぐ後でclickイベントが発生することです。今、私は、潜在的なクリックを処理するときに長押しが発生したかどうかを手動で追跡しています。onLongPress()は他のすべてのSimpleOnGestureListenerと同様にブール値を返さないのはなぜですか?

ここに何か不足していますか?つまり、これは、OnGestureListenerインターフェイスを実装しようとするときにも役に立ちません。なぜなら、それはonLongPress()のvoidを予想しているからです。私の選択肢は何ですか?

+1

それを実装できないブール値が返されないのはどうですか? – trutheality

+0

私はそれを実装することができますが、イベントを消費することはできません。 'SimpleOnGestureListener'の他のすべての関数はブール値を返します。そのブール値を使用して、イベントが消費されたかどうかを判断できます。それが消費された場合、それ以上のイベント処理を停止します。 たとえば、 'onFling'はbooleanを返します。そのため、後に' click'を処理しないことを知っています。私は 'onLongPress'でそれをすることはできません。 –

答えて

0

私はonLongPressがonDownを好きではないと思います。これは、onLongPressの戻り値は何かをチェックするのに使われませんが、onDownの戻り値はシステムにとって有益です。 。アンドロイドのソースコードから:

mStillDown = true; 
    mInLongPress = false; 
    if (mIsLongpressEnabled) { 
     mHandler.removeMessages(LONG_PRESS); 
     mHandler.sendEmptyMessageAtTime(LONG_PRESS, mCurrentDownEvent.getDownTime() +  TAP_TIMEOUT + LONGPRESS_TIMEOUT); 
    } 
     mHandler.sendEmptyMessageAtTime(SHOW_PRESS, mCurrentDownEvent.getDownTime() + TAP_TIMEOUT); 
     handled |= mListener.onDown(ev); 

onLongPressとShowPressは、これらの状況が起こったことを伝えるだけです。戻り値はシステムにとって有用ではありません。

デザインを実装する場合は、変数を使用してLongPressが起きたかどうかを確認できます。 これがあなたを助けてくれることを願っています。

関連する問題