web-dev-qa-db-ja.com

Android onBackPressed()のオーバーライド

1つのアクティビティのみでonBackPressed()をオーバーライドできますか?

[戻る]ボタンをクリックして、特定のアクティビティでダイアログを呼び出したいが、他のすべてのアクティビティでは、以前の動作(以前のアクティビティに移動)で動作させたい。

編集

あなたの答えをみんなありがとう、私はあなたが私に言ったようなすべてをすでに持っていましたが、私の問題は、別のアクティビティの戻るボタンをクリックしたときに、前のアクティビティ(私は戻るボタンがオーバーライドされたもの)に行き、それが機能していないと思った、私はそれがアプリケーション全体でonBackPressed()をオーバーライドしていると思った、今私はそれを得た。

55
Jilberta

はい。そのActivityでのみオーバーライドします

@Override
public void onBackPressed()
{
     // code here to show dialog
     super.onBackPressed();  // optional depending on your needs
}

このコードを他のActivityに入れないでください

133
codeMagic

CodeMagicの例に従ってonBackPressed()メソッドをオーバーライドし、デフォルトアクション(現在のアクティビティを終了する)を実行したくない場合はsuper.onBackPressed();への呼び出しを削除します。

40
Erastus

OnBackPressed()を呼び出すだけで、戻るボタンの後にアクティビティを表示したい場合は、

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
    startActivity(intent);
    finish();

それは私のために働いた。

4

ダイアログを表示するアクティビティでonBackPressed()メソッドを呼び出すだけで、その中にダイアログが表示されます。

2
Pavlos

次のコードを使用してフィールドを初期化するだけです

private int count = 0;
    @Override
public void onBackPressed() {
    count++;
    if (count >=1) {
        /* If count is greater than 1 ,you can either move to the next 
        activity or just quit. */
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
        finish();
        overridePendingTransition
        (R.anim.Push_left_in, R.anim.Push_left_out);
        /* Quitting */
        finishAffinity();
    } else {
        Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show();

        // resetting the counter in 2s
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                count = 0;
            }
        }, 2000);
    }
    super.onBackPressed();
}
2
Jay Patel

音楽を制御するための最良かつ最も一般的な方法は、startActivity(Intent intent)をオーバーライドするマザーアクティビティを作成することです。その中にshouldPlay=trueを配置し、onBackPressed()-にshouldPlay = trueを配置します。 onStop-その中に、shouldPlayを条件として条件付きmediaPlayer.stopを入れます

次に、母親のアクティビティを他のすべてのアクティビティに拡張するだけで、コードを複製する必要はありません。

0
dor00012

これを試してみる

  @Override
public void onBackPressed(){
        super.onBackPressed();
         Intent i=new Intent(Intent.ACTION_MAIN);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        finish();
}
0
Tabish khan

最初に、Aと呼んだアクティビティが別のアクティビティ(B)を拡張し、

onbackpressed関数を使用する場合、BにあるすべてのコードはAでも実行されます。したがって、これらを分離する場合は、分離する必要があります。これは、AがBを拡張してはならないことを意味し、それらのそれぞれに対して個別にonbackpressedを実行できます。

0
Homa