(40) アクティビティ切り替え時にパラメーターを渡す。

投稿者: | 2023年3月14日

249 views

この記事は最終更新から 439日 が経過しています。

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());
    }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)