IntentにListデータを持たせてActivity間の受け渡しをする方法

9,666 views
Skip to first unread message

花田

unread,
May 9, 2011, 3:22:03 AM5/9/11
to 日本Androidの会
お疲れ様です、花田です。

今回の行いたい処理をまず、ご説明させて頂きます。
※2画面使用(A画面→B画面)

①A画面下部にリストデータが表示。
②そのデータを選択(複数可)すると、A画面上部にリストとして表示される。
③送信ボタンを押すとA画面上部に表示されているデータがB画面にリストで表示される。


以上のような処理なのです。
ちなみにSerializableを使用する記事があったのですが、詳細
に説明がなくSerializableをどう使用したらいいのか困っています。

ListデータをActivity間で受け渡しする方法をどなたかご教授お願致します。
サンプル等があればお願いします。


宜しくお願い致します。

大垣憲俊

unread,
May 9, 2011, 8:07:02 AM5/9/11
to android-g...@googlegroups.com
花田さん

大垣です。データを受け渡すといっても方法はいろいろありますので、ちょっと議論の余地ありです。
ローカルに(つまり端末上に)保存することに限っても、以下のような選択肢があります。

私案1:ListViewに紐付けたアダプタ(たとえばArrayAdapter)のデータをシリアライズしてファイルに書き出し、画面遷移後それをでシリアライズして復活させる(内部ファイルまたはSDカードへのリード/ライト)
私案2:少ないデータ量であれば、SharedPreferencesに格納し、画面遷移後それを取得
私案3:SQLiteデータベースに格納しておき、画面遷移間は表示対象の query または id を受け渡す


サーバ管理者の戯言

unread,
May 9, 2011, 11:46:07 AM5/9/11
to android-g...@googlegroups.com
服部です。

intent経由で複数データのやりとりですが、私はContentValuesにデータを詰めてBundleに対して
Parcelableを経由して送信しています。

送信側でも受信側でも実装すればできます。


  送り側
Intent intent = new Intent();
ContentValues cv = new ContentValues();
cv.put("Data1", "リスト1");
cv.put("Data2", "リスト2");
cv.put("Data3", "リスト3");

Bundle b = new Bundle();
b.putParcelable("List", cv);
intent.putExtras(b);

startActivity(intent);


  受け側
Intent intent = getIntent();
Bundle b = intent.getExtras();
ContentValues cv = b.getParcelable("List");

Log.i("List", "Data1:" + cv.get("Data1"));
Log.i("List", "Data2:" + cv.get("Data2"));
Log.i("List", "Data3:" + cv.get("Data3"));

こんな感じですね。


2011年5月9日21:07 大垣憲俊 <noritos...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。
>

大垣憲俊

unread,
May 9, 2011, 12:12:49 PM5/9/11
to 日本Androidの会
服部さん

大垣です。なるほど簡単ですね。初耳でした。
それで、こうした方法ごとの評価は、どう考えたものでしょうか。。。
受け渡すデータ量によって応答速度やヒープの圧迫具合なんかが評価基準となりそうで。

でも、教えて頂いた方法が、データ量が少なければ、いちばん簡単で良いですね。
ありがとうございました。

サーバ管理者の戯言

unread,
May 9, 2011, 1:55:37 PM5/9/11
to android-g...@googlegroups.com
服部です。

私は同一アプリ間では無く、別アプリ間でのデータ受け渡しを考えていて辿りつきました。
データ量が多い場合には恐らくはファイル間連携の方が良いとは思うのですが、少量のデータ
の場合が基本的には多いだろうと思っています。

#個人的にはインテント間でのメモリ経由での受け渡しデータが大量である場合には設計が
#間違っていると思っています。

大量データの受け渡しの場合には、SQLite経由とかファイル経由が筋かと思いますが、その
キーの受け渡しは、ContentValuesで行うと分かりやすさも伴うので良いのかなと。

花田さんの趣旨に合っているのかは分かりませんが、簡単にアプリ間インタフェースを作る場合
のサンプルになれば幸いです。


2011年5月10日1:12 大垣憲俊 <noritos...@gmail.com>:

takayuki hamawaki

unread,
May 9, 2011, 8:55:30 AM5/9/11
to android-g...@googlegroups.com
お疲れ様です、suppi__と申します。

Activity間の値の受け渡し方法として、IntentにputExtra/getExtraを利用する方法はご存知でしょうか?
ArrayListがSerializableを実装しているため、putExtra(String name, Serializable
value)を利用すればいいかと思います。
この際ArrayListの内部データもSerializeableの必要があります。

また、Integer、String、ParcelableのArrayListの場合は、
putIntegerArrayListExtra(String name, ArrayList<Integer> value)
putStringArrayListExtra(String name, ArrayList<String> value)
putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)
がありますので検討してみてはいかがでしょうか。


以上です。

花田智憲

unread,
May 9, 2011, 8:59:14 PM5/9/11
to android-g...@googlegroups.com
大垣さん
服部さん
suppi__さん

分かりやすいご回答有難うございます。

データ量は少ないです。
今後のためにも、ファイル経由のパターンなど試してみます。

実装して動いたらご報告させて頂きます。

有難うございました!


Reply all
Reply to author
Forward
0 new messages