アプリ開発初心者の暇つぶしAndroid体験記

アプリ開発初心者がAndroidアプリ開発始めました。日々学んだことをアウトプットしていきます。

【Android】Intentを使って遷移先画面からデータを受け取る方法

こんにちは!
今回は遷移先画面からデータを受け取る方法をまとめます。

遷移先画面へのデータの渡し方は前回の記事でまとめています。
xprogrammingx.hatenablog.com

それではやっていきましょう!

画面呼び出しのメソッド変更

呼び出した画面から値を受け取る場合は、
単に呼び出す時と使うメソッドが異なります。

startActivityForResult(subIntent, 1);

このようにstartActivityForResultメソッドを使用します。
第一引数は遷移先のIntent、
第二引数はリクエストコードをint型で渡します。

このリクエストコードについてもう少し詳細に書いておきます。

複数のIntentを呼び出した場合に、このリクエストコードによって
どのIntentからの戻りかを判断することができます。
この値がどこに表れてくるのかは後述します。

遷移先での実装

遷移先での実装方法は、遷移元と同様に
putExtraを使って値を格納していきます。
このあたりは前回書いたので省略

Intent intent = getIntent();
intent.putExtra("KEY_INT", intVal + 1);
intent.putExtra("KEY_STRING", "返ってきた" + stringVal);
setResult(RESULT_OK,intent);

getIntentを使ってIntentを取得します。
このIntentに値を格納して、遷移元に返していきます。

返す際はsetResultメソッドを使用します。
第一引数は結果コードです。RESULT_OK か RESULT_CANCELED のどちらかを設定します。
第二引数は返却するIntentです。

値の受け取り

では、遷移先で設定された値を取得する方法です。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    int returnInt = data.getIntExtra("KEY_INT",0);
    String returnString = data.getStringExtra("KEY_STRING");
    
    System.out.println(String.valueOf(returnInt));
    System.out.println(returnString);    
}

メソッドの引数を見ていきましょう。
第一引数はリクエストコードです。startActivityForResultの第二引数に設定した値がここに格納されます。
第二引数は結果コードです。setResultで設定したRESULT_OK か RESULT_CANCELEDが入ります。
第三引数はIntentです。ここからデータを取得していきます。
データの取得方法は前回と同様なので省略します。

実行した結果以下の通りになります。

2020-03-24 17:21:32.744 5106-5106/com.example.test I/System.out: 4
2020-03-24 17:21:32.745 5106-5106/com.example.test I/System.out: 返ってきた文字列型だよ

最後に実行したソースを載せておきます。
それでは今回は以上です!
お疲れさまでした(^_^)/

ソースコード

[MainActivity.java]

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent subIntent = new Intent(getApplication(), SubActivity.class);

        // intの値を渡す
        subIntent.putExtra("KEY_INT", 3);

        // Stringの値を渡す
        subIntent.putExtra("KEY_STRING", "文字列型だよ");

        // list<String>の値を渡す
        List<String> list = new ArrayList<>();
        list.add("リスト1");
        list.add("リスト2");
        list.add("リスト3");
        list.add("リスト4");
        list.add("リスト5");
        subIntent.putStringArrayListExtra("KEY_LIST", (ArrayList)list);

        startActivityForResult(subIntent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        int returnInt = data.getIntExtra("KEY_INT",0);
        String returnString = data.getStringExtra("KEY_STRING");

        System.out.println(String.valueOf(returnInt));
        System.out.println(returnString);
    }
}


[SubActivity.java]

public class SubActivity extends AppCompatActivity implements View.OnClickListener {

    int intVal = 0;
    String stringVal = "";
    List<String> stringList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        Intent intent = getIntent();
        intVal = intent.getIntExtra("KEY_INT",0);
        stringVal = intent.getStringExtra("KEY_STRING");
        stringList = intent.getStringArrayListExtra("KEY_LIST");

        findViewById(R.id.button).setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        Intent intent = getIntent();
        intent.putExtra("KEY_INT", intVal + 1);
        intent.putExtra("KEY_STRING", "返ってきた" + stringVal);
        setResult(RESULT_OK,intent);

        finish();

    }
}