KotlinのIntent(インテント)でAndroidアクティビティ間にオブジェクトを送信する方法
Kotlinでは、インテント(Intent)にSerializableインターフェースを実装したオブジェクトを格納することで、あるアクティビティから別のアクティビティへデータを受け渡せます。この記事では、EditTextに入力した文字列を持つオブジェクトを第二画面へ送信し、そこで表示するサンプルを通じて、その実装方法をステップごとに解説します。
手順1:新規プロジェクトを作成する
Android Studioを開き、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力し、プロジェクトをセットアップしましょう。
手順2:activity_main.xmlにコードを追加する
res/layout/activity_main.xmlに以下のコードを記述します。メッセージ入力用のEditTextと、オブジェクト送信用のButtonを配置しています。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:hint="Enter your Message" />
<Button
android:id="@+id/btnSendObj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editText"
android:layout_centerInParent="true"
android:layout_marginTop="15dp"
android:text="Send Obj to 2nd Activity" />
</RelativeLayout>
手順3:MainActivity.ktにコードを追加する
src/MainActivity.ktに以下のコードを記述します。ボタンがタップされると、入力内容をMessageオブジェクトに設定し、putExtra()でインテントに格納してSecondActivityを起動します。
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import java.io.Serializable
class MainActivity : AppCompatActivity() {
lateinit var editText: EditText
lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
editText = findViewById(R.id.editText)
button = findViewById(R.id.btnSendObj)
button.setOnClickListener {
val intent = Intent(this@MainActivity, SecondActivity::class.java)
val message = Message()
message.setMessage(editText.text.toString())
intent.putExtra("message", message)
startActivity(intent)
}
}
}
class Message : Serializable {
private var message: String? = null
override fun toString(): String {
return "$message"
}
fun setMessage(message: String?) {
this.message = message
}
companion object {
private const val serialVersionUID = 1L
}
}
手順4:新しい空のアクティビティを作成する
「Empty Activity」としてSecondActivityを新規作成し、以下のコードを記述します。
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView"
android:textAlignment="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@android:color/holo_purple"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
SecondActivity.kt
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
title = "KotlinApp"
val textView: TextView = findViewById(R.id.textView)
val intent = intent
val message = intent.getSerializableExtra("message") as Message?
textView.text = "$message"
}
}
受け取り側では、getSerializableExtra()を呼び出してインテントからMessageオブジェクトを取り出し、TextViewに表示しています。
手順5:AndroidManifest.xmlにコードを追加する
androidManifest.xmlに以下のコードを記述します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
アプリを実行して動作を確認する
それでは、アプリを実行してみましょう。ここでは実機のAndroidスマートフォンがパソコンに接続されているものとして説明します。Android Studioでプロジェクト内のいずれかのアクティビティファイルを開き、ツールバーにある実行アイコン
をクリックしてください。デバイスの選択画面で接続したモバイル端末を選ぶと、端末の画面にアプリの初期画面が表示されます。


補足:SerializableとParcelableの使い分け
本記事では手軽に使えるSerializableを採用しましたが、パフォーマンスが重要な場面ではParcelableの利用も検討する価値があります。また、近年ではJetpack Navigationを活用した画面遷移や、ViewModelを介した状態管理と組み合わせることで、より堅牢なデータ受け渡しが実現できます。用途やプロジェクトの規模に応じて最適な手法を選びましょう。
-
Androidでアクティビティ間を画像を受け渡す方法をわかりやすく解説
はじめに 本記事では、Androidアプリであるアクティビティ(Activity)から別のアクティビティへ画像を受け渡す方法を解説します。ここでは、Intentに画像のリソースIDを格納して渡す、最もシンプルで確実な手法を紹介します。 手順1:新規プロジェクトの作成 Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要事項をすべて入力してプロジェクトを作成しましょう。 手順2:activity_main.xml の編集 res/layout/activity_main.xml に以下のコードを追加します。「Send
-
【Android】1つのフラグメントから別のフラグメントへデータを送信する方法(インターフェース活用の実装例)
はじめに このチュートリアルでは、Androidアプリで1つのフラグメント(Fragment)から別のフラグメントへデータを送信する方法を解説します。フラグメント同士は直接通信することができません。そこで本記事では、カスタムインターフェース「SendMessage」を定義し、ホストとなるMainActivityを仲介してデータを受け渡す、定番かつ推奨されるパターンを紹介します。 具体的には、タブで切り替えられる2つのフラグメントを用意し、1つ目のフラグメントで入力したテキストをボタン操作で2つ目のフラグメントに表示させるサンプルアプリを作成します。 ステップ1:新しいプロジェクトを作成する