740 views
この記事は最終更新から 999日 が経過しています。
0. 関連投稿
(39) アプリの画面切り替えをアクティビティの変更で実現する。
(40) アクティビティ切り替え時にパラメーターを渡す。 ←本投稿
(41) アクティビティ終了時にパラメーターを戻す。
1. やりたいこと
Androidアプリの画面切り替え時、すなわちアクティビティの切り替え時に、遷移元から遷移先にパラメーターを渡したい。
今回は 往路 について書いておく。
復路 のパラメーターの受け渡しについては、次投稿以降に書く。
2. やってみる 入門編 : 単純なデータの受け渡し
Android developers公式サイトに手順が丁寧に説明されているので、まずはそちらを参照すること。
https://developer.android.com/training/basics/firstapp/starting-activity?hl=ja

本投稿では、前投稿 (39) アプリの画面切り替えをアクティビティの変更で実現する。 にパラメーター受け渡し機能を追加する。
(1) MainActivity.java
SubActivityへの切り替え時に、EditTextに入力された文字列を渡すように改造した。
具体的には putExtra で Intentインスタンスにパラメーターを埋め込む。
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
EditText et = findViewById(R.id.et_textMain);
String txt = et.getText().toString();
// EditTextに入力された文字列を、切り替え先の画面に渡す情報としてセット
Intent intent = new Intent(getApplicationContext(), SubActivity.class);
intent.putExtra("param", txt);
// 画面切り替えを実行
startActivity(intent);
}
return super.onTouchEvent(event);
}
(2) SubActivity.java
SubActivityの生成時に、受け渡されたパラメーターを取り出し、EditTextの初期値とする。
具体的には getStringExtra, getIntExtra で Intentインスタンスからパラメーターを取り出す。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// 切り替え元画面から渡された情報を EditTextに設定する。
Intent intent = getIntent();
String txt = intent.getStringExtra("param");
EditText et = findViewById(R.id.et_textSub);
et.setText(txt);
}
2. やってみる 応用編 : 複雑なデータの受け渡し
Serializable または Parcelable インタフェースを実装したクラスであれば、そのインスタンスを渡すことができる。
(1) MyParam.java
パラメーターの受け渡しに使われるクラス。
Serializable interfaceを実装する。
package com.example.testchangescreen;
import java.io.Serializable;
public class MyParam implements Serializable {
private String txt;
private int num;
public MyParam(String txt, int num){
this.txt = txt;
this.num = num;
}
public String getTxt(){
return this.txt;
}
}
(2) MainActivity.java
SubActivityへの切り替え時に、パラメーターを受け渡すための MyParamクラスインスタンスを生成する。
具体的には putExtra で Intentインスタンスにパラメーターを埋め込む。
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
Intent intent = new Intent(getApplicationContext(), SubActivity.class);
// EditTextから入力文字列を取得する。
EditText et = findViewById(R.id.et_textMain);
String txt = et.getText().toString();
// クラスインスタンスをパラメーターとして埋め込む。
MyParam myp = new MyParam(txt, 123);
intent.putExtra("myparam", myp);
// 画面切り替えを実行
startActivity(intent);
}
return super.onTouchEvent(event);
}
(3) SubActivity.java
SubActivityの生成時に、受け渡されたパラメーターを取り出し、EditTextの初期値とする。
具体的には getSerializableExtra で Intentインスタンスからパラメーターを取り出す。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// 切り替え元画面から渡された情報を取得する。
Intent intent = getIntent();
MyParam myp = (MyParam)intent.getSerializableExtra("myparam");
// 受け取った情報を EditTextの初期値に使用する。
EditText et = findViewById(R.id.et_textSub);
et.setText(myp.getTxt());
}