• 検索結果がありません。

第 4 章 インテント 55

4.2 拡張データ

4.2.1 拡張データの登録

インテントというのはメッセージのオブジェクトですので、それに対してさまざまなデータを 登録することができます。

たとえば、インテントが持っているputExtraというメソッドを呼び出すことによって、「拡張 データ」(extended data)と呼ばれるデータをそのインテントに登録することができます。

拡張データは、キーと値のペアという形のデータです。インテントを受け取ったオブジェクト は、キーを指定することによって、それに対応づけられている値を取得することができます。

キーとしては、アプリケーションのパッケージ名を接頭辞として持つ文字列を使います。たと えば、

org.example.namako

4.2. 拡張データ 59 というパッケージ名のアプリケーションでは、

org.example.namako.umiushi

というような文字列を、拡張データのキーとして使います。

putExtraには、2個の引数を渡します。そうすると、1個目をキー、2個目を値とする拡張デー

タがインテントに登録されます。2個目の引数としては、真偽値、数値、文字列、あるいはそれ らの配列など、さまざまな型のデータを渡すことができます。

4.2.2 インテントの取得

インテントが持っているデータをインテントから取得するためには、それに先立って、そのイ ンテント自体を取得する必要があります。

アクティビティーは、

Intent getIntent()

というメソッドを持っています。このメソッドは、アクティビティーが受け取ったインテントを 戻り値として返します。

4.2.3 拡張データのマップの取得

インテントから、そこに登録されている拡張データの値を取得するためには、拡張データの

マップ(Bundleクラスのオブジェクト)をインテントから取得して、そのマップから拡張デー

タの値を取得する、という2段階の処理をする必要があります。

拡張データのマップは、インテントが持っている、

Bundle getExtras()

というメソッドを呼び出すことによって取得することができます。このメソッドは、拡張データ のマップをインテントから取得して、それを戻り値として返します。インテントに拡張データが 登録されていない場合は、nullを返します。

4.2.4 拡張データの値の取得

拡張データの値は、拡張データのマップが持っている次のようなメソッドを使うことによって 取得することができます。

boolean getBoolean(String key)

int getInt(String key)

String getString(String key)

boolean[] getBooleanArray(String key)

int[] getIntArray(String key)

String[] getStringArray(String key)

これらのメソッドは、拡張データのキーを引数として受け取って、そのキーに対応する値を戻 り値として返します。

4.2.5 アクティビティーにデータを渡すアプリケーションの例

それでは、インテントに拡張データを登録することによって、アクティビティーからアクティ ビティーへデータを渡すアプリケーションを作ってみましょう。

まず最初に、次のようなプロジェクトを作成してください。

Project name putextra

Application name 拡張データの登録 Package name org.example.putextra Create Activity PutExtraActivity

次に、main.xmlを次のように書き換えてください。

レイアウトXMLの例 main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<EditText android:id="@+id/edittext1">

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<EditText android:id="@+id/edittext2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<EditText android:id="@+id/edittext3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button android:id="@+id/tosecond"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第二の画面に進む"

/>

</LinearLayout>

次に、res/layoutの下にsecond.xmlというファイルを作って、そのファイルに次のレイア ウトXMLを入力してください。

レイアウトXMLの例 second.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:id="@+id/textview1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<TextView android:id="@+id/textview2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<TextView android:id="@+id/textview3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

次に、Activityをスーパークラスとする、SecondActivityという名前の新しいクラスを作っ て、SecondActivity.javaの内容を次のように書き換えてください。

プログラムの例 SecondActivity.java package org.example.putextra;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class SecondActivity extends Activity {

@Override

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

setContentView(R.layout.second);

final TextView textview1 = (TextView) findViewById(R.id.textview1);

final TextView textview2 = (TextView) findViewById(R.id.textview2);

final TextView textview3 = (TextView) findViewById(R.id.textview3);

Bundle extras = getIntent().getExtras();

if (extras != null) {

4.2. 拡張データ 61 String s1 = extras.getString("org.example.putextra.s1");

String s2 = extras.getString("org.example.putextra.s2");

String s3 = extras.getString("org.example.putextra.s3");

textview1.setText(s1);

textview2.setText(s2);

textview3.setText(s3);

} } }

次に、PutExtraActivity.javaを次のように書き換えてください。

プログラムの例 PutExtraActivity.java package org.example.putextra;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.Button;

import android.content.Intent;

public class PutExtraActivity extends Activity { /** Called when the activity is first created. */

@Override

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

setContentView(R.layout.main);

final Button tosecond = (Button) findViewById(R.id.tosecond);

tosecond.setOnClickListener(new OnClickListener() { public void onClick(View v) {

startSecondActivity();

} } });

private void startSecondActivity() {

final EditText edittext1 = (EditText) findViewById(R.id.edittext1);

final EditText edittext2 = (EditText) findViewById(R.id.edittext2);

final EditText edittext3 = (EditText) findViewById(R.id.edittext3);

String s1 = edittext1.getText().toString();

String s2 = edittext2.getText().toString();

String s3 = edittext3.getText().toString();

Intent i = new Intent(this, SecondActivity.class);

i.putExtra("org.example.putextra.s1", s1);

i.putExtra("org.example.putextra.s2", s2);

i.putExtra("org.example.putextra.s3", s3);

startActivityForResult(i, 0);

} }

最後に、Androidマニフェストのapplication要素の子供として、

<activity android:name=".SecondActivity"

android:label="@string/app_name"/>

という要素を書き加えてください。

さて、アクティビティーからアクティビティーへデータを渡すAndroidアプリケーションは、

これで完成です。実行してみてください。

最初に表示される画面は、三つのエディットテキストと、[第二の画面に進む]というボタンか ら構成されています。それぞれのエディットテキストに文字列を入力して、ボタンをクリックし てみてください。そうすると、画面が切り替わって、最初の画面で入力した文字列がその上に表 示されます。