Androidプログラマへの道 〜 Moonlight 明日香 〜 - 画面間でデータを受け渡しする
画面間でのデータを受け渡しは, インテント(Intent)を使って行う.

呼び出し先にデータを渡す

  • MainActivity.java
    • インテントのインスタンスを生成する.
    • Intent#putExtraメソッドでインテントに値を持たせる. Intent#putExtra(任意のキー値, 持たせたいデータ)
    • startActivityメソッドを使って, サブ画面のアクティビティを起動する.
package com.moonlight_aska.android.mainactivity;

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

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

    edit = (EditText)findViewById(R.id.edittext01_id);
    Button btn = (Button)findViewById(R.id.button01_id);
    btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        // インテントへのインスタンス生成
        Intent intent = new Intent(MainActivity.this, SubActivity.class);
        // インテントに値をセット
        intent.putExtra("keyword", edit.getText().toString());
        // サブ画面の呼び出し
        startActivity(intent);
      }
    });
  }
}
  • SubActivity.java
    • getIntentメソッドで, インテントを取得する.
    • Intent#getStringExtraメソッドで, データを取得する.
package com.moonlight_aska.android.mainactivity;

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

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);

    TextView text = (TextView)findViewById(R.id.textview03_id);
    // インテントを取得
    Intent intent = getIntent();
    // インテントに保存されたデータを取得
    String data = intent.getStringExtra("keyword");
    text.setText(data);

    Button btn = (Button)findViewById(R.id.button02_id);
    btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        // サブ画面の終了
        finish();
      }
    });
  }
}
<?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/textview01_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text= "@string/textview01_label"
    />
  <EditText android:id="@+id/edittext01_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <Button android:id="@+id/button01_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text= "@string/button01_label"
    />
</LinearLayout>
  • res/AndroidManifest.xml
    • サブ画面のアクティビティを登録する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.moonlight_aska.android.mainactivity"
  android:versionCode="1"
  android:versionName="1.0">
  <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=".SubActivity"
      android:label="@string/app_name">
    </activity>
  </application>
  <uses-sdk android:minSdkVersion="4" />
</manifest>


                 

呼び出し先からデータを受け取る

  • MainActivity.java
    • インテントのインスタンスを生成する.
    • startActivityFromResultメソッドを使って, サブ画面のアクティビティを起動する.
    • onActivityResultメソッドをオーバーライドする.
    • requestCode, resultCodeをチェックする.
    • データを取得する.
package com.moonlight_aska.android.mainactivity;

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

public class MainActivity extends Activity {
  /** Called when the activity is first created. */
  private TextView text = null;
  private static final int SUB_ACTIVITY = 1001;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    text = (TextView)findViewById(R.id.textview02_id);
    Button btn = (Button)findViewById(R.id.button01_id);
    btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        // インテントへのインスタンス生成
        Intent intent = new Intent(Example01.this, SubActivity.class);
        // サブ画面の呼び出し
        startActivityForResult(intent, SUB_ACTIVITY);
      }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    // requestCodeがサブ画面か確認する
    if(requestCode == SUB_ACTIVITY) {
      // resultCodeがOKか確認する
      if(resultCode == RESULT_OK) {
        // 結果を取得して, 表示する.
        text.setText(data.getCharSequenceExtra("keyword"));
      }
    }
  }
}
  • SubActivity.java
    • インテントのインスタンスを生成する.
    • Intent#putExtraメソッドでインテントに値を持たせる.
    • setResultメソッドで結果をセットする.
    • finishメソッドで元の画面に戻る.
package com.moonlight_aska.android.mainactivity;

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

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

    edit = (EditText)findViewById(R.id.edittext01_id);
    Button btn = (Button)findViewById(R.id.button02_id);
    btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        // インテントのインスタンス作成
        Intent data = new Intent();
        // インテントに値をセット
        data.putExtra("keyword", edit.getText().toString());
        // 結果を設定
        setResult(RESULT_OK, data);
        // サブ画面の終了
        finish();
      }
    });
  }
}