AndroidでActivityから結果を受け取る

ある Activity から別の Activity へ画面遷移させる為にインテントという仕組みがあります。 

別 Activity へ遷移させる方法についてはこちらを参照してください。

 

Android では遷移後の Activity を終了した時、その結果を呼び出し元の Activity で受け取る事ができます。

結果を受け取る側のActivityでする事

単に別の Activity へ遷移させる時には startActivityメソッドを使いましたが、結果を受け取りたい場合には startActivityForResultメソッドを使います。

 

startActivityForResultメソッドで起動された Activity が終了すると、onActivityResultメソッドが呼び出されます。

startActivityForResult

startActivityForResultメソッドでは、呼び出す Activity の Intent に加えて、リクエストコードという値を引数として与えます。呼び出したい Activity が複数ある場合にこのリクエストコードを使ってどの Activity からの結果なのかを判断できます。

    private static final int REQUESTCODE_TEST = 1;

      :


    public void onTestButtonClick(View v) {
        Intent intent = new Intent(this, SubActivity.class);
        intent.putExtra("TestNum", 1);
        intent.putExtra("TestTxt", "テスト");
        startActivityForResult(intent, REQUESTCODE_TEST);
    }

onActivityResult

onActivityResultメソッドには、startActivityForResultの引数としたリクエストコードと、遷移後のActivity からの結果として 結果コードデータ の2つの値を受け取ります。

 

結果コードRESULT_OKRESULT_CANCELED のどちらかで、結果を返す側の Activity にて適切な値が返るようにコーディングする必要があります。

データは結果コード以外の任意の値を受け取る為の物で、こちらも結果を返す側の Activity で値をセットします。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUESTCODE_TEST:
                if (RESULT_OK == resultCode) {
                    String name = data.getStringExtra("TestName");



                }
                break;
        }
    }

結果を返す側のActivityでする事

setResultメソッドを使って、結果コード と データ をセットします。

 

返すべき結果の準備が整う前に戻るボタンなどで Activity が終了される事もあるので、その判断の為に結果コードを使います。

多くの場合は setResult の引数を RESULT_OK でセットしたあと finishメソッドで終了するという使い方になると思います。

    public void onOkButtonClick(View v) {
        Intent intent = new Intent();
        intent.putExtra("TestName", "テストさん");
        setResult(RESULT_OK, intent);
        finish();
    }