Android
 Computer >> コンピューター >  >> プログラミング >> Android

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でプロジェクト内のいずれかのアクティビティファイルを開き、ツールバーにある実行アイコンKotlinのIntent(インテント)でAndroidアクティビティ間にオブジェクトを送信する方法をクリックしてください。デバイスの選択画面で接続したモバイル端末を選ぶと、端末の画面にアプリの初期画面が表示されます。

KotlinのIntent(インテント)でAndroidアクティビティ間にオブジェクトを送信する方法

KotlinのIntent(インテント)でAndroidアクティビティ間にオブジェクトを送信する方法

補足:SerializableとParcelableの使い分け

本記事では手軽に使えるSerializableを採用しましたが、パフォーマンスが重要な場面ではParcelableの利用も検討する価値があります。また、近年ではJetpack Navigationを活用した画面遷移や、ViewModelを介した状態管理と組み合わせることで、より堅牢なデータ受け渡しが実現できます。用途やプロジェクトの規模に応じて最適な手法を選びましょう。

  1. Androidでアクティビティ間を画像を受け渡す方法をわかりやすく解説

    はじめに 本記事では、Androidアプリであるアクティビティ(Activity)から別のアクティビティへ画像を受け渡す方法を解説します。ここでは、Intentに画像のリソースIDを格納して渡す、最もシンプルで確実な手法を紹介します。 手順1:新規プロジェクトの作成 Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要事項をすべて入力してプロジェクトを作成しましょう。 手順2:activity_main.xml の編集 res/layout/activity_main.xml に以下のコードを追加します。「Send

  2. 【Android】1つのフラグメントから別のフラグメントへデータを送信する方法(インターフェース活用の実装例)

    はじめに このチュートリアルでは、Androidアプリで1つのフラグメント(Fragment)から別のフラグメントへデータを送信する方法を解説します。フラグメント同士は直接通信することができません。そこで本記事では、カスタムインターフェース「SendMessage」を定義し、ホストとなるMainActivityを仲介してデータを受け渡す、定番かつ推奨されるパターンを紹介します。 具体的には、タブで切り替えられる2つのフラグメントを用意し、1つ目のフラグメントで入力したテキストをボタン操作で2つ目のフラグメントに表示させるサンプルアプリを作成します。 ステップ1:新しいプロジェクトを作成する