Androidの画面遷移 Intentを使ってobjectを渡す方法

■アプリケーション概要
画面遷移にオブジェクトを渡す方法
Serializableインタフェースを実装することによって画面遷移でオブジェクトを渡すことが出来る

■手順

  • Intentの引数にオブジェクトを指定する
  • オブジェクトはSerializableインタフェースを実装する必要がある
  • putExtraにオブジェクトを指定する
  • よばれ側はgetSerializableExtraメソッドでオブジェクトを取得する

■プロジェクト概要
プロジェクト名:SampleIntent
メインActivity:SampleIntent
サブActitvity:SampleIntentNext
渡すオブジェクト:StoreData

■ソース
SampleIntent

  • Intentの生成は第1引数に呼び出し元、第2引数に遷移先Activivtyを指定する
  • putExtraは第1引数に任意のKey、第2引数に格納したいデータを指定する
package sample.intent;

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 SampleIntent extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button bt = (Button)findViewById(R.id.Button01);
        bt.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
	        	//Intentオブジェクト生成
	            Intent intent = new Intent(SampleIntent.this,
	            		SampleIntentNext.class);
	            StoreData data = new StoreData();
	            intent.putExtra("StoreData", data);
	            intent.setAction(Intent.ACTION_VIEW);
		        startActivity(intent); 
			}


        });
    }
}

SampleIntentNext

  • getIntent()を使ってIntentの取得する
  • getSerializableExtra("StoreData")を使ってオブジェクトの取得する
  • StoreDataでキャストする
package sample.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SampleIntentNext extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = getIntent();
        StoreData data = (StoreData)intent.getSerializableExtra("StoreData");
        Log.v("SampleIntentNext", data.getVal() + " " + data.getStr());
    }
}


StoreData

  • Serializableインタフェースを実装する
package sample.intent;

import java.io.Serializable;

public class StoreData implements Serializable{
	private int val;
	private String str;
	protected StoreData() {
		this.val = 10;
		this.str = "test";
	}
	public int getVal() {
		return val;
	}
	public void setVal(int val) {
		this.val = val;
	}
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	
	
}

AndroidManifest.xml

  • activityタグを追加し、遷移画面の情報を追記
  • android:name属性に遷移画面のActivityクラスを記述
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="sample.intent"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <activity android:name=".SampleIntent"
                  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=".SampleIntentNext"
                  android:label="@string/app_name">
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>