ホームへ戻る

6.2 明示的インテント.1


 まずは明示的インテントです。

先ほども言った通り、
例えば「SecondActivity」という名のアクティビティを自分で作り、
「ボタンが押されたらSecondActivityを呼び出す」なんてやる方法が明示的インテントです。

今回は、アクティビティを2つ用意し、インテントによって切り替えてみましょう。
以下のようなものを作ろうと思います。



起動したらまずこのような画面になり、「次のアクティビティへ」というボタンを押すと、画面が切り替わって



「2つ目のアクティビティです」と表示されるようにする予定です。

ではまず、新しいクラスであるSecondActivityを追加して下さい。



↓SecondActivity (新規追加)

public class SecondActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main2);//main2.xmlをセット
        }

}


レイアウトも新しく必要なので、レイアウトにmain2.xmlも追加します。




↓main2.xml (新規追加)

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2つ目のアクティビティです" />

</TableLayout>


2つ目のアクティビティには、「2つ目のアクティビティです」と表示するTextViewを設置しました。

↓AndroidManifest.xml (赤字部変更)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.dixq.androids_castle"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".AndroidsCastleActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"/> </application> </manifest>


Activityを追加したので、マニフェストにActivityの情報を追加します。

次に一つ目のアクティビティのレイアウトであるmain.xmlを編集します。
「次のアクティビティへ」と表示するボタンを設置しました。

↓main.xml (赤字部変更)


<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="次のアクティビティへ" />

</TableLayout>


いつものメインとなるAndroidsCastleActivityです。

↓AndroidsCastleActivity (赤字部変更)


package net.dixq.androids_castle;

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 AndroidsCastleActivity extends Activity implements OnClickListener {

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                Button btn = (Button) findViewById(R.id.button1);//main.xmlにあるbutton1を見つける
                btn.setOnClickListener(this);//onClickが呼ばれるように本インスタンスをセット
        }

        @Override
        public void onClick(View v) {//クリック時に呼ばれる
                Intent intent = new Intent();
                intent.setClassName("net.dixq.androids_castle", "net.dixq.androids_castle.SecondActivity");
                startActivity(intent);
        }

}


今回のポイントは、onClickメソッド内の3行です。
Intent#setClassNameメソッドによって、次に明示的に呼び出すアクティビティを指定します。
上に書いたように
setClassName("パッケージ名", "クラス名");
と指定します。
後は、startActivityの引数に持たせてコールする、たったこれだけです。

呼び出し元のアクティビティはそのままの状態で一時停止し、
呼び出した先のアクティビティで、「戻る」ボタンを押すなどして破棄されると戻ってきます。

ただ今回の方法ではただ呼び出すだけなので、データのやり取りができません。
ファイル選択アクティビティを呼び出し、終了したら選んだファイル名を元のアクティビティに知らせる等、
アクティビティ間でデータのやり取りをしたいことがあります。

次にアクティビティ間でデータのやり取りをする方法を説明します。

本章のプロジェクトはこちら

→分からないことがあれば掲示板で質問して下さい


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

- Remical Soft -