【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(); } }
最後にアプリの宣伝させてください(*^-^*)