0

ユーザーが戻るボタンをクリックして前のアクティビティにアクセスする、他の操作を行うとアクティビティが終了するシナリオがあります (着信、電源ボタンのクリック、アプリの切り替えなど)。これらの呼び出しは、前のアクティビティ ( で呼び出されstartActivityForResultます) とは異なる結果を返す必要があります。実行されるアクションに応じて、正常な終了または乱雑な終了のいずれかになります...

これで、Android が呼び出すと、onBackPressed常にそれも呼び出されonStopますが、その逆ではありません。onBackPressedそのため、 を呼び出さずに呼び出したときにアプリを終了させたいのですが、内部onStopで呼び出しても機能しません。finish()onBackPressed

私の問題を説明するためのいくつかのコード:

@Override
public void onStop() {
    // this gets called no matter what, I don't like that
    Log.i(TAG, "Canceled");
    setResult(RESULT_CANCELED, new Intent());
    finish();
    super.onStop();
}

@Override
public void onBackPressed() {
    Log.i(TAG, "User ended activity");
    setResult(RESULT_OK, new Intent());
    finish();
    super.onBackPressed();
}
4

1 に答える 1

2

setResult()アプリを閉じるときに繰り返し呼び出したくない場合は、 Activity.isFinsihing()を使用します。

@Override
public void onStop() {
    // Now this is only called if Activity is not finishing already
    if(!isFinishing()) {
        Log.i(TAG, "Canceled");
        setResult(RESULT_CANCELED, new Intent());
        finish();
    }
    super.onStop();
}
于 2012-09-02T15:57:23.850 に答える