Androidで別Activityを起動したり値を渡したり

あるActivityから別のActivityへ画面遷移させるには、インテントという仕組みを使います。 

インテントは単にActivityを起動させるだけでなく、必要な情報を引き渡す事も可能です。

AndroidManifest.xmlにActivityを登録

起動させる Activity は AndroidManifest.xml に登録されている必要があります。

Android Studio を使って新しい Activity を作ると自動で AndroidManifest へ追記してくれるので意識する機会は少ないかもしれませんが、無いと起動できないので注意しましょう。

 

XMLの<application>要素の中に<activity>要素を追加します。

<activity>要素には android:name 属性でActivityクラスの名前を指定します。

AndroidManifest.xmlの例

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.test">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application>
        <activity
            android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SubActivity"/>
    </application>
</manifest>

別Activityを起動する

別Activityを起動するには Intent クラスを使います。

Intent のコンストラクタへ起動したい Activity のクラス情報を渡してインスタンスを作成します。

 

値を引き渡したい場合は、Intent クラスのputExtraメソッドを使います。

適当なキーと関連付けて値をセットしていきます。

 

Intent の準備が出来たら startActivityメソッドを呼び出せば新たな Activity が起動します。

    Intent intent = new Intent(this, SubActivity.class);
    intent.putExtra("TestNum", 1);
    intent.putExtra("TestTxt", "テスト");
    startActivity(intent);

起動された側で値を受け取る

Intent の putExtraメソッドで渡された値は、起動された側で受け取る事が出来ます。

Activity の getIntentメソッドで起動時に使われた Intent を取得し、getExtraメソッドを使って値を受け取ります。

    Intent intent = getIntent();
    int    testNum = intent.getIntExtra("TestNum", 0);
    String testTxt = intent.getStringExtra("TestTxt");