startActivityForResultを使ってみる【Android・Kotlin】

今までActivity間の画面遷移におけるデータの受け渡しは、シングルトンやPreferenceなどでパターンでやっていたが、簡単なものならstartActivityForResultを使えば便利そうだ。ここでは単純なモデルで、startActivityForResultを使ったデータの受け渡しの動作確認をしていこう。

仕様

MainActivityとSubActivityを作って遷移させる。


画像の拡大

SubActivityからメッセージを受け取って、MainActivityのTextViewへ反映させるといったシンプルなものだ。また、端末の戻るボタンで戻った場合は、違うメッセージを表示させる。

MainActivity

それでは、MainActivityから見ていこう。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val show = findViewById<Button>(R.id.show)
        show.setOnClickListener {
            val intent = Intent(this, SubActivity::class.java)
            startActivityForResult(intent, 9)   // AcrequestCodeで複数Activityに対応できる
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode != 9) { return }

        val result = findViewById<TextView>(R.id.result)

        if (resultCode == Activity.RESULT_OK && data != null) {
            val message = data.getStringExtra("message")
            result.text = message

        } else if(resultCode == Activity.RESULT_CANCELED) {
            result.text = "端末の戻るボタンが押されました。"
        }

    }
}

startActivityForResult(intent, 9) では、AcrequestCodeに値をセットすることで、Activityごとに処理を分けることができる。onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) は、戻ったときにコールバックされるメソッドだ。ここでは、resultCodeでActivityを識別して、Intentからデータを取り出している。また、Activity.RESULT_CANCELEDの場合は、端末の戻るボタンが押されたものと判断させている。

SubActivity

次に、遷移先であるSubActivityを見ていこう。

class SubActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)

        // 最初にキャンセルされた結果をセットしておくことで、端末の戻るボタンに対応させる
        setResult(Activity.RESULT_CANCELED) // 無くても動く?

        val close = findViewById<Button>(R.id.close)
        close.setOnClickListener {

            val result = Intent()
            result.putExtra("message", "Hello! I'm from SubActivity!⛄️")
            setResult(Activity.RESULT_OK, result)
            finish()
        }
    }
}

setResult(Activity.RESULT_CANCELED)であらかじめキャンセル指定している。最初にキャンセルされた結果をセットしておくことで、端末の戻るボタンでRESULT_CANCELEDが認識されるようにしている。しかし、デフォルトでRESULT_CANCELEDが設定されているようなので、この記述はなくても良いのかもしれない。

setResult(Activity.RESULT_OK, Intent)では、渡したいデータをIntentを使ってセットしている。この場合、キーを"message"とし、値に "Hello! I'm from SubActivity!⛄️" をセットしている。以上のプログラムで、最初の図の画面結果が得られる。

Intentの役割


画像の拡大

コンポーネントは、他のコンポーネントを呼び出すことができる。そのときに、情報をメッセージとしてAndroidシステムに渡す仕組みをIntentと呼ぶ。ここでのコンポーネントとは、アクティビティやサービスである。つまり、ActivityからActivityへ直接値を渡しているわけではない。AndroidシステムへIntentを投げて、それに適合したActivityが呼び出されるといったイメージだ。

デスクワークの負担を減らすアイテム

作業効率をアップさせるには姿勢が大事です!実際に使ってみてどれもオススメなのでよかったら参考に!

Bestandノートパソコンスタンド 11 '' -16 '' Macbook Air Pro/富士通と互換性のある放熱性に優れたアルミニウム合金PCスタンド-シルバー
Bestandノートパソコンスタンド 11 '' -16 '' Macbook Air Pro/富士通と互換性のある放熱性に優れたアルミニウム合金PCスタンド-シルバー

ノートパソコンの高さをあげると、長時間のデスクワークでも作業者の負担を軽減する事が可能です。 アルミニウム製品、純正品、高品質、高級感があ ります。 対応機種:MacBook、MacBook Air、MacBook Pro、富士通と対応11"-16"ノートパソコン スタンド.

Amazon
AKRacing ゲーミングチェア Pro-X V2 GREY
AKRacing ゲーミングチェア Pro-X V2 GREY

AKRacingハイエンドゲーミングチェア。大きめの座面でゆったりとした座り心地。張地を経年劣化に強い高耐久仕様のPUレザーに変更したアップグレードモデル 寸法:背もたれ幅55cm/奥行55cm/高さ95cm、座面下高さ:32~39cm、座面厚さ:13cm、重量:25kg

Amazon
Kensington ExpertMouse ワイヤレストラックボール K72359JP
Kensington ExpertMouse ワイヤレストラックボール K72359JP

接続方式/Bluetooth、2.4GHz USB付属品/レシーバー、パームレスト、日本語取扱説明書 サイズ(本体):W130×D157×H65mm 対応OS:2.4GHzUSB:Windows10/8.1/8/7、MacOS10.8以降/Bluetooth4.0LE:Windows10/8.1、MacOS10.8以降

AmazonRakuten

Anrdoidアプリ開発にオススメの書籍

こちらの本は、図や絵が多くてわかりやすく、Androidアプリ開発初心者でも理解しやすい内容。基本的なことはしっかりおさえられるので、この手の本は一冊読んでおくと良と思う。

基本からしっかり身につくAndroidアプリ開発入門
基本からしっかり身につくAndroidアプリ開発入門

圧倒的な多数のユーザーが使っているヤフーのアプリ。その制作の最前線にいる黒帯エンジニアが、ユーザーが使いやすいアプリの大切な基本をしっかりと解説します。

KindleAmazonRakuten

Kotlinの実践的な使い方が学べる内容の本で、プログラミング技術をもっと磨きたい人向け。センスの良いプログラミングがたくさん紹介されていて、個人的には「目からうろこ」の連続だった本。

Kotlinプログラミング
Kotlinプログラミング

Kotlinは、Javaとの相互運用を可能にし、Android OSでGoogleがフルサポートする静的型プログラミング言語です。この言語は、Javaだけでは十全ではない(Javaだけでは実装に手間がかかりすぎる)、軽量かつ豊かな表現形式や、他言語ではすでに実装されている最新の機能を盛り込んでいます。

KindleAmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/