7

Android 2.1に対してアプリケーションを構築していて、戻るボタンをオーバーライドしたい。

私はここの例に従いました:

http://android-developers.blogspot.com/2009_12_01_archive.html

そして私のコードは次のとおりです:


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
        }

        return true;
    }

    @Override
    public void onBackPressed() {
    Log.d("CDA", "onBackPressed Called");
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent); 

        return;
    }   

2.xより前のデバイスでは動作しますが、2.1update-1のHeroと2.2のNexusOneでは動作しません。

例から欠落しているものはありますか?または、なぜそれが機能しないのか誰かが指摘できますか?

logcatでボタンが押されることすらありません。

4

3 に答える 3

11

onKeyUp()を使用していますか?

Android 1.x ではonKeyDown() のみ、Android 2.x ではonBackPressed()のみを使用します。

于 2010-08-24T16:20:49.787 に答える
4

onKeyUp(): http://developer.android.com/sdk/android-2.0.html中に Back インターセプトを配置する必要があることをいくつかのクイック検索が示唆しています。それは試みに値します。次のコードは、サイトから直接引用したものです。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** DO ACTION HERE ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
于 2010-08-24T16:11:24.367 に答える
0

親コンストラクターを呼び出す必要があります。

onKeyDown()メソッド呼び出しで

super.onKeyDown();

そしてonBackPressed()

super.onBackPressed();
于 2012-06-18T18:11:03.240 に答える