画面遷移 (他画面 (Activity) の起動)

Android アプリで他の画面を起動するときはインテント (Intent) を使用します。

インテントは他のアプリと連携するときに用いるもので、他のアプリ(例えばブラウザアプリ、メールアプリ等)を起動することができます。
(これについての説明は 他アプリの起動 を参照してください。)

同じアプリでも他の画面 (Activity) クラスを起動する場合には、インテントを使用します。(ここで説明するのは、明示的インテントと呼ばれるものです)

起動したい画面 (Activity) のクラスが SubActivity、パッケージ名が jp.sample とすると、以下のようにするとその画面クラスを起動することができます。

// インテントの生成
Intent intent = new Intent();
intent.setClassName("jp.sample", "jp.sample.SubActivity");

// SubActivity の起動
startActivity(intent);


また、プロジェクト内にある AndroidManifest.xml ファイルに以下を追加する必要があります。

<activity android:name=".SubActivity"></activity>

Android アプリで画面を作成する場合は、必ず AndroidManifest.xml ファイルに activity として宣言する必要があります。ここに宣言されていない画面の Activity クラスは、システムが見つけることができず、実行もされません。



サンプルとして、メイン画面のボタンをクリックしたときに他の画面を起動する例を示します。

リソースの定義

メイン画面とサブ画面のレイアウトリソースを定義します。
メイン画面にはボタンを配置し、サブ画面にはテキストを配置します。

main.xml

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >

  <Button
    android:id="@+id/btnDisp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="他画面の起動"/>"

</LinearLayout>

sub.html

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="起動された画面"/>

</LinearLayout>

※ text に設定しているの文字列は、本来 string.xml に定義すべきですが、説明を簡単にするために直接記述しています。

ソースの定義

メインの Acitivy クラスでは、レイアウトの設定とボタンクリックでサブ画面を起動します。サブの Activity クラスでは、レイアウトの設定のみを行います。

ExplicitIntentSampleActivity.java

package jp.sample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ExplicitIntentSampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnDisp = (Button)findViewById(R.id.btnDisp);
        btnDisp.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Sub 画面を起動
                Intent intent = new Intent();
                intent.setClassName("jp.sample", "jp.sample.SubActivity");
                startActivity(intent);
            }
        });
    }
}

SubActivity.java

package jp.sample;

import android.app.Activity;
import android.os.Bundle;

public class SubActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
    }
}

マニフェストファイルの定義

AndroidManifest.xml ファイルに以下を追加します。

<activity android:name=".SubActivity"></activity>