Intentでオブジェクトの受け渡し

2011/04/13

Intentで画面遷移する際、オブジェクトを受け渡したい場合どうするのか? Intent.putExtra() の引数型は「String」「double」「int」「float」「long」「byte」「CharSequence」「char」「Bundle」「Parcelable」「Serializable」「boolean」「short」 となってるので、それ以外のオブジェクトやカスタムクラスを、そのまま受け渡しできないようです。

Serializable を implements する

カスタムオブジェクトを受け渡す場合、事前に Serializable を implements しておく。 [java] import java.io.Serializable; import java.util.Date;

public class Schedule implements Serializable { private static final long serialVersionUID = -7168471472978288786L;

private Date dtstart;
private String title;

public Date getDtstart() {
    return dtstart;
}

public void setDtstart(Date value) {
    dtstart = value;
}

public String getTitle() {
    return title;
}

public void setTitle(String value) {
    title = value;
}

} [/java]

元画面でモデルデータを受け渡す

[java] private void pageDetail(Schedule schedule) { Intent intent = new Intent(CalendarActivity.this, ScheduleDetailActivity.class); intent.putExtra("schedule", schedule); startActivityForResult(intent, 1);
} [/java]

移動先画面でモデルデータを受け取る

[java] public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.schedule_detail);

Intent intent = getIntent();
    Schedule schedule = (Schedule) intent.getSerializableExtra("schedule");
}

[/java]

2011/06/08追記 こちらの方が正しいかも。 [java] public void onActivityResult(int requestCode, int resultCode,Intent data) { if( resultCode == RESULT_OK) { Schedule schedule = (Schedule) data.getSerializableExtra("schedule"); } } [/java]

参考ページ

Android 画面遷移での値の受け渡し