Androidでアクティビティから別のアクティビティへ文字列を渡す方法
概要
本記事では、Androidアプリ開発において、あるアクティビティ(Activity)から別のアクティビティへ文字列を渡す方法を解説します。アクティビティ間のデータ受け渡しには、Intent(インテント)オブジェクトのputExtra()メソッドを使うのが基本です。ここでは、入力した文字列をボタン操作で次の画面に表示するシンプルなサンプルアプリを題材に、手順を追って説明していきます。
手順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">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Change Activity"
android:id="@+id/newActbutton"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<EditText
android:id="@+id/etMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/newActbutton"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
手順3:MainActivity.java に遷移処理を実装する
src/MainActivity.javaに以下のコードを記述します。ボタンがクリックされると、EditTextに入力された文字列を取得し、Intentに格納した上でSecondActivityへ遷移します。
package app.com.sample;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
Button changeActivityButton;
EditText messageEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
messageEditText = (EditText) findViewById(R.id.etMessage);
changeActivityButton = (Button) findViewById(R.id.newActbutton);
changeActivityButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
String message = messageEditText.getText().toString();
intent.putExtra("message_key", message);
startActivity(intent);
}
});
}
}
コードのポイント
intent.putExtra("message_key", message):キー名「message_key」を付けて、文字列データをIntentに格納します。startActivity(intent):Intentを引数に渡して、次のアクティビティを起動します。
手順4:activity_second.xml にレイアウトを定義する
res/layout/activity_second.xmlに以下のコードを記述します。受け取った文字列を表示するためのTextViewを配置しています。
<?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=".SecondActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Activity"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="151dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:textSize="25dp"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp" />
</RelativeLayout>
手順5:SecondActivity.java で文字列を受け取る
src/SecondActivity.javaに以下のコードを記述します。送信側で設定したキーを指定してIntentから文字列を取り出し、TextViewにセットして画面に表示します。
package app.com.sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
TextView messageTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String message = getIntent().getStringExtra("message_key");
messageTextView = (TextView)findViewById(R.id.textView2);
messageTextView.setText(message);
}
}
コードのポイント
getIntent().getStringExtra("message_key"):アクティビティ起動時のIntentから、指定したキーに対応する文字列を取得します。送信側のキー名と一致させる必要があります。
手順6:AndroidManifest.xml にアクティビティを登録する
androidManifest.xmlに以下のコードを記述します。SecondActivityをマニフェストへ登録することを忘れないようにしましょう。未登録のアクティビティを起動しようとすると、アプリがクラッシュします。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<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=".SecondActivity"></activity>
<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端末をPCに接続しているものとして説明します。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーのRunアイコンをクリックしてください。接続したモバイル端末を選択すると、端末にアプリの初期画面が表示されます。
EditTextに任意の文字列を入力して「Change Activity」ボタンをタップすると、SecondActivityへ遷移し、入力した文字列がそのまま表示されることを確認できます。


補足:AndroidXについて
本記事のサンプルコードでは、旧サポートライブラリのandroid.support.v7.app.AppCompatActivityを使用しています。現在のAndroid Studioで新規プロジェクトを作成した場合は、AndroidXのandroidx.appcompat.app.AppCompatActivityに読み替えてください。また、最近のプロジェクトではKotlinが標準言語となっていますが、putExtra()/getStringExtra()によるデータ受け渡しの考え方はJava・Kotlin共通です。
-
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:新しいプロジェクトを作成する