276 views
この記事は最終更新から 569日 が経過しています。
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()); }