web-dev-qa-db-ja.com

Androidで戻るキーが押されたかどうかを確認しますか?

私が自分のメインアクティビティにいて、新しいアクティビティを開始するとします

MainActivity > NewActivity

そして、NewActivityから、戻るキーを押します

MainActivity < NewActivity

MainActivityが閉じた後に表示されている場合はNewActivityで何かを実行したいが、アプリケーションを最初に実行したときなど、MainActivityが正常に実行されている場合はそうしないでください。これが可能かどうか誰かが知っていますか?

20
William L.

いくつかのアイデア:

  • MainActivityが起動したときに、NewActivityにフラグを設定するだけです。
  • startActivityForResultからMainActivityを呼び出し、NewActivityを調整して結果を設定できます。結果はNewActivityが終了したときにMainActivity.onActivityResult()で受け取ります。
8
Ted Hopp
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        Log.d(this.getClass().getName(), "back button pressed");
    }
    return super.onKeyDown(keyCode, event);
}

@更新。 NewActivityの終了時に通知を受け取りたい場合は、startActivityForResult(Intent、requestCode)で開始する必要があります。次に、MainActivityのonActivityResult()をオーバーライドする必要があります。ここでrequestcodeパラメータを確認し、戻りコードが送信コードと等しい場合(childActivityを開始するとき)、ビジネスを行うためのコードを入力します。

int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Result OK.d.
    if (requestCode == MYCODE) {
        // do something good
    }
}
21

最初の方法でアクティビティのアクションバーで押された戻るボタンを検出するために以下の方法を試し、2番目の方法はモバイルハードウェアボタンの戻るまたはアクティビティボタンを強制終了するために使用されます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case Android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed() {
    setResult(RESULT_CANCELED);
    super.onBackPressed();
}
13
saravanan

NewActivityのonBackPressed()メソッドをオーバーライドして、戻るボタンが押されたことを検出できます。次に、MainActivityに通知するために、バンドルでブールフラグを送信して、MainActivityがNewActivityの後にその開始を検出できるようにします。

NewActivity:

       @Override
       public void onBackPressed() {
                boolean fromNewActivity=true;

        Intent mainIntent = new Intent(view.getContext(), MainActivity.class);
        Bundle bundleObj = new Bundle();
        bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity));
        mainIntent.putExtras(bundleObj);
        startActivityForResult(mainIntent, 0);
           }

OnCreate()メソッドのMainActivityで:

       Bundle extras = getIntent().getExtras();
       boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));

これで、MainActivityがNewActivityの後に開かれたかどうかを確認できます。

8
Yogesh Somani

NewActivityを起動するときは、startActivityForResultを使用し、有効なrequestIdを使用する必要があります。そのようなrequestIdは、onActivityResultが終了するとNewActivityに戻されます。

0
K-ballo