アクティビティで戻るボタンを処理する方法


136

アクティビティで戻るボタンを処理する方法は?ボタンがあります。ボタンの1つをクリックすると、必要なボタンにリダイレクトされます。正常に動作していますが、戻るボタンを押すと終了します。

この問題の解決方法。これらすべてのボタンに対して1つのアクティビティしかありません。前もって感謝します。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

上記のコードを使用して戻るボタンを処理しましたが、機能しません。私が戻るボタンを押すと、それ自体が打たれました。

回答:


326

次のように処理できます。

APIレベル5以上の場合

@Override
public void onBackPressed() {
    // your code.
}

API 5より古い

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

6
断片的にはどうですか?
クラッシュマン2014年

1
はい、断片からそれを行う方法を誰かが知っていますか
James Wierzba

3
@ james-wierzbaはアクティビティを処理し、処理をフラグメントに委任します
Grigorii Chudnov 2016年

19

上記に加えて、私は個人的にお勧めします

onKeyUp():

プログラム的にいえば 、ユーザが最初にキーを押下したときに発生しますKeyDownイベントが、それはなり、ユーザーが押下されたキーを保持しながら繰り返します。*

これは、すべての開発プラットフォームに当てはまります。

Googleの開発では、ビューの[戻る]ボタンをインターセプトしている場合は、キーダウンでstarttrackingを使用してKeyEventを追跡し、次にキーアップで呼び出すことを提案しています。

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()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

15

ハードウェアデバイスの[戻る]ボタンとソフトホーム(戻る)ボタンの両方(例: "<-")の場合、これが機能します。(*私は活動にアプリバー/ツールバーを持っていることに注意してください)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

乾杯!


仕上げを使用しましたが、前のアクティビティに戻りません。
Si8 2016年

2
「finish()」は、現在のアクティビティのみを閉じます。インテントを使用して、前のアクティビティに戻ることを処理する必要があります。ところで、以前のアクティビティからナビゲートするときに「finish()」を実行しなかった場合、以前のアクティビティはまだ開いているはずです。
S bruce 2016年

私は何かをテストしており、あなたを更新します。ご返信ありがとうございます。
Si8 2016年

1
finish()の代わりにsuper.onBackPressed()を使用するだけ
b00n12

9

より簡単な方法は、[戻る]ボタンの押下をキャプチャし、次のようにmoveTaskToBack(true)を呼び出すことです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0では新しいonBackPressedメソッドが導入され、[戻る]ボタンの処理方法に関するこれらの推奨事項


9

あなたは使うべきです:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

ここで定義されているとおり:http : //android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

古いバージョンを使用してコードをコンパイルしている場合は、android.os.Build.VERSION_CODES.ECLAIRを5に置き換えます(たとえば、ECLAIRという名前のプライベートintを追加できます)。


1

これは私を助けました...

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

または????? これを引き出しトグルにも使用できます

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

これがお役に立てば幸いです。


1

これは何かを行う簡単な方法です。

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

もっと複雑な方法があるかもしれませんが、私は単純さが好きです。たとえば、上記のテンプレートを使用して、ユーザーがアプリケーションからサインアウトした後、選択した別のアクティビティに戻ります。

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