8

onKeyDownアプリで Up および Down ハードウェア キーを処理するためにのみ必要なイベントがあります。これらについては、処理されると true が返されます。それ以外の場合は、OSがそれらを処理する必要があることを意味するfalseを返します。ただし、[戻る] ボタンを押すと、 myonKeyDownが呼び出されて false が返されますが、それ以外の効果はありません。ActivityOSが現在のものを終了し、前のものを再開することを望んでいます/期待します。

これは正しい動作ですか、それとも何か問題がありますか?

アップデート:

乾杯、私の onKeyDown ルーチンは次のようになります。CommonsWare のアドバイスに従いました。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);

    boolean handled = true;

    // handle key presses
    switch (keyCode) {

    case KeyEvent.KEYCODE_DPAD_LEFT:
        mCursorX = mCursorX - 1;
        if (mCursorX < MAP_MIN_X) { mCursorX = MAP_MIN_X; }
        break;

    case KeyEvent.KEYCODE_DPAD_RIGHT:
        mCursorX = mCursorX + 1;
        if (mCursorX > MAP_MAX_X) { mCursorX = MAP_MAX_X; }
        break;

    default:
        handled = false;

    if (handled) {
        redrawCursorno();
        return true;
    }

    return super.onKeyDown(keyCode,event);
}

私のクラスは次のようになります。

public class Map extends Activity implements OnClickListener, SurfaceHolder.Callback, OnTouchListener {

@override と最初の 'super' 行が存在する理由がわからなかったことは認めざるを得ません。super.onKeyDown がアクティビティの onKeyDown を実行する場合、おそらく最初は必要ありません。ルーチンがそれを処理しない場合にのみ、最後に追加したと思います。それは正しいように聞こえますか、それともまだ混乱していますか?

-フリンク

4

3 に答える 3

6

スーパークラスへのチェーンをお勧めします。つまり、代わりに:

return(false);

行う:

return(super.onKeyDown(...));
于 2010-08-22T10:23:28.863 に答える
4

onBackPressed() メソッドをオーバーライドできます。このメソッドは、ユーザーが戻るキーを押したことをアクティビティが検出したときに呼び出されます。この場合、onKeyDown メソッドを使用する必要はありません。

于 2010-08-22T12:27:09.767 に答える
1

また、super.onKeyDown() を 2 回呼び出しています。関数の最初に 1 回、最後に 1 回です。必要なのは最後の 1 つだけです。

于 2010-08-22T19:45:14.580 に答える