3

Blackberry 4.6.0 アプリケーションを 4.7.0 の Storm に移植しました。私が制御しようとしているタッチイベントを除いて、すべて正常に動作しています。以下のメソッドでタッチイベントをトラップしますが、これは想定どおりに動作しますが、問題は touchEvent のロジックが実行されてメニュー (メニューボタンでアクティブ化) が常に表示された後に発生します。false、true、および super.touchEvent(message) を返そうとしましたが、まだ表示されます。

タッチイベントをトラップした後にメニューが表示されないようにする方法についてのアイデアはありますか?

protected boolean touchEvent(TouchEvent message)
{
     if (message.getEvent() == TouchEvent.CLICK)
     {
        //My code here
     }
}

あなたの考えは大歓迎です

4

2 に答える 2

6

haagmmの答えを明確にするために:

TouchEvent.CLICK がアプリケーションに送信された後、navigationClick イベントも送信されます。これは互換性の理由によるもので、アプリが touchEvents に応答するように明示的に記述されていなくても、ButtonFields などはタッチスクリーン デバイスで動作します。

アプリのフィールドで navigationClick イベントが消費されない (true を返す) 場合、コンテキスト メニューが表示されます。

ボタン フィールドをクリックしたときにこの動作が見られる場合は、デフォルトで ButtonFields がクリック イベントを消費しないことが原因です。次のスタイル ビットを設定して常に ButtonFields を作成することをお勧めします。

ButtonField myButtonField = 
    new ButtonField( ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY );

haagmm のコードは 1 つの解決策ですが、TouchEvent.CLICK 処理コードをコピーして、navigationClick メソッドにも貼り付けることをお勧めします。そうすれば、BlackBerry Tour のようなトラックボール デバイスでもアプリケーションを使用できます。

于 2009-06-07T19:17:53.743 に答える
3

画面を「クリック」するか、sim でマウスを左クリックすると、4.6 デバイスでトラックボールをクリックした場合と同様に、コンテキスト メニューがトリガーされます。

touchEvent をオーバーロードしたフィールドで、次のようなことを行う必要があります。

 protected boolean navigationClick(int status, int time) { return true; }
于 2009-05-12T20:47:08.310 に答える