JAVA:IT TRICK

インテントの基本

Androidのインテントのコンストラクタやメソッドと基本的な使い方について詳しく説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

インテントとは、簡単に言えばAndroid上でオブジェクトとオブジェクト間での情報のやり取り時に使用するオブジェクトです。ここでいうオブジェクトとはActivityやサービスなどのことです。

インテントを表しているクラスはその名の通りIntent(android.content.Intent)クラスです。ではこのクラスで提供しているよく使われるコンストラクタとメソッドを見てみましょう。

◆表1 Intentクラスのコンストラクタ
コンストラクタ処理内容
Intent() 空のインテントを作成します。
Intent(String action) アクションを指定してインテントを作成します。
Intent(String action, Uri uri) アクションとデータ(URI)を指定してインテントを作成します。
Intent(Context packageContext, Class<?> cls) 宛先のクラスを明示的に指定してインテントを作成します。
◆表2 Intentクラスのメソッド
メソッド 処理内容
Intent setAction(String action) インテントにアクションを設定します。
Intent setData(Uri data) インテントにデータ(URI)を設定します。
Intent setType(String type) インテントにタイプを設定します。
Intent putExtra(String name, Object value) インテントの付加情報に要素を追加します。
void putExtras(Intent src) 別のインテントの付加情報を複製して設定します。
void putExtras(Bundle extras) インテントに付加情報を設定します。
void removeExtra(String name) nameで指定しているインテントの付加情報を削除します。
Intent addCategory(String category) インテントにカテゴリを付加します。
void removeCategory(String category) インテントから、指定したカテゴリを削除します。
Intent setDataAndType(Uri data, String type) インテントにデータとタイプをまとめて設定します。
Intent setComponent(ComponentName component) このインテントを利用するコンポーネントを明示的に指定します。
Intent addFlags(int flags) インテントにフラグを設定します。

実は、インテントにはさらに「明示的なインテント」と「暗黙的なインテント」があります。「明示的なインテント」とはコンストラクタIntent(Context packageContext, Class cls)やメソッドsetComponent(ComponentName component)などを使って取り扱うオブジェクトを「明示的」に指定されたインテントです。それに対し、「暗黙的なインテント」とは宛先のオブジェクトを明示的に指定していないインテントのことです。

これ以後の記事でもっと詳しく説明しますが、ここではまずインテントの基本的な使い方を見ていきましょう。例としては最も簡単な画面遷移を確認してみましょう。

まず、インテントは下記のように生成します。引数1には遷移元のActivityを指定し、引数2には遷移先のAcrivityを指定します。

Intent intent = new Intent(引数1, 引数2);

次に生成したインテントを引数にstartActivity()メソッドを使いActivityを起動します。

startActivity(intent);

完全なサンプルとしては以下になります。遷移元のMainActivityを作成し、Main2Activityへ遷移するためのボタンを配置します。実際の遷移処理はonClick()メソッドで実装しています。

MainActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;

public class MainActivity extends Activity
implements OnClickListener {

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Buttonの生成
        Button myButton = new Button(this);
        // Buttonのラベルの設定
        myButton.setText("Main2Activityへ");
        // ButtonにonClickイベントリスナーを追加
        myButton.setOnClickListener(this);

        LayoutParams params =
                new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT);

        setContentView(myButton, params);
    }

	public void onClick(View v) {

		// インテントのインスタンス生成
		Intent intent = new Intent(this, Main2Activity.class);
		// 次画面のアクティビティ起動
		startActivity(intent);
	}
}

Main2ActivityはMainActivityと同様にボタンを配置し、MainActivityに遷移するための処理をonCreate()メソッドで実装しています。

Main2Activity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;

public class Main2Activity extends Activity
implements OnClickListener {

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Buttonの生成
        Button myButton = new Button(this);
        // Buttonのラベルの設定
        myButton.setText("Main1Activityへ");
        // ButtonにonClickイベントリスナーを追加
        myButton.setOnClickListener(this);

        LayoutParams params =
                new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT);

        setContentView(myButton, params);
    }

	public void onClick(View v) {

		// インテントのインスタンス生成
		Intent intent = new Intent(this, MainActivity.class);
		// 次画面のアクティビティ起動
		startActivity(intent);
	}
}

MainActivityとMain2ActivityをAndroidManifest.xmlに登録します。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="takahara.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".Main2Activity"
            android:label="@string/app_name">
        </activity>

    </application>
</manifest>

如何でしたでしょうか。では、以後の記事でインテントの他の使い方についても確認していきましょう。