[自分用メモ] AndroidのIntentはActivityの切り替えに使うものだという理解

AndroidのIntentクラスはサンプルでもよく出てくるのだが、いまひとつ意味が分からないことが多かった。いろいろ調べても端的に説明されていることも少なかったし、詳しく深く書かれているものはあっても、深すぎてよくわからないページも多い気がした(私が理解力がないだけなんだけど)。
で、サンプル修行の時期を終えて実際のコードを書き始めてから、Activityの切り替えをしなければならない場面が訪れたときに「そうか、ここでIntentか!」とあたりまえのことに気が付いたというお粗末な私であった……情けない。

書籍のサンプルコードなどでも、Intentに絞った説明でない限り、複数の説明の中にIntentが埋もれていて、しかもサラリと触れられて終了している場合も多い。そこで極力Intentだけに的を絞ったサンプルを作ることにしてみた。
LinearLayoutやButtonが出てくるが、これも必要最低限のメソッドしか呼んでいない。

以下のサンプルではIntentActivityとAnotherActivityという2つのActivityをボタンクリックするごとに往復する単純で意味のないサンプルである。

and01and02

いずれのクラスとも内容はIntentの部分だけの違いであるため、注目すべき部分というのはさらに狭められている。

[Sponsored Link]


Javaのコードの前にAndroidManifest.xmlファイルの編集だけ。アプリ内で複数のActivityを使う場合は、AndroidManifest.xmlに22行目のように「<action android:name=”android.intent.action.MAIN”></action>」と追加しておく必要がある。

[xml]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.intent"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.intent.IntentActivity"
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=".AnotherActivity" />
</application>
</manifest>
[/xml]

そして、2つのクラスを準備する。IntentActivityクラスとAnotherActivityクラスだ。

(1) IntentActivityクラス

[java]
package com.example.intent;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class IntentActivity extends Activity implements View.OnClickListener {

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

LinearLayout l = new LinearLayout(this);
l.setBackgroundColor(Color.BLUE);
l.setOrientation(LinearLayout.HORIZONTAL);
setContentView(l);

Button b = new Button(this);
b.setText("あっちへ");
b.setOnClickListener(this);
l.addView(b);
}

public void onClick(View v) {
Intent intent = new Intent(this, AnotherActivity.class);
startActivity(intent);
}
}
[/java]

(2) AnotherActivityクラス

[java]
package com.example.intent;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class AnotherActivity extends Activity implements View.OnClickListener {

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

LinearLayout l = new LinearLayout(this);
l.setBackgroundColor(Color.RED);
l.setOrientation(LinearLayout.HORIZONTAL);
setContentView(l);

Button b = new Button(this);
b.setText("そっちへ");
b.setOnClickListener(this);
l.addView(b);
}

public void onClick(View v) {
Intent intent = new Intent(this, IntentActivity.class);
startActivity(intent);
}
}
[/java]

注目するべき部分はどちらも18、23、29行目の3行。
そのうち18行目は単にActivityが切り替わったのが可視的に判別しやすいように色を変えているだけである。
23行目もボタンのラベルを変えているだけ。この2行は実質的にIntentの理解とは直接関係がない。

Intentの理解を考えたときには、29行目だけ注目してもらえばいいだろう。
onClickメソッドは(2つのクラスともView.OnClickListenerインタフェースをimplementsし、ButtonクラスのsetOnClickListener()メソッドでthisインスタンスを設定して、ボタンが押されたら自分のonClickメソッドを呼び出すようにしている。
29行目ではIntentクラスのインスタンスを生成しているが、第二引数に指定しているアクティビティが異なっている。IntentActivityクラスではAnotherActivity.classを、逆にAnotherActivityクラスではIntentActivity.classをタスキ掛けのように指定している。

実際にはIntentはもっと奥が深い使い方がある(らしい)が、今のところの私の理解としては「Activityの切り替え」という場面で上記のように簡単な使い方に留まっている。

本格アプリを作ろう! Androidプログラミングレシピ作ればわかる!Androidプログラミング―10の実践サンプルで学ぶAndroidアプリ開発入門 (Smart Mobile Developer)作ればわかる! Androidプログラミング 第2版 -SDK4対応- (Smart Mobile Developer)スマートにプログラミング Android入門編 第3版 SDK4.x対応やさしいAndroidプログラミング 第2版 (「やさしい」シリーズ)湘南貿易 デュック・ド・モンターニュ ノンアルコールワイン 750ml湘南貿易 デュック・ド・モンターニュ ノンアルコールワイン 750ml

2 Replies to “[自分用メモ] AndroidのIntentはActivityの切り替えに使うものだという理解”

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください