Android application development 第10章:Bundleを使ったデータの受け渡し

Androidアプリでは、画面(Activity)間でデータを渡す必要がある場面がよくあります。
Javaのアプリケーションでも、あるウィンドウから別のウィンドウに情報を渡すことがありますよね。それと同じですが、Androidではそれを**IntentBundleという仕組みで行う**のが基本です。


■ Bundleとは?

Bundle は、キーと値のペアを保存できる「マップ」のようなものです。
Androidでは、値を受け渡ししたり、状態を一時保存するための標準的なコンテナとして使われます。

Bundle bundle = new Bundle();
bundle.putString("username", "tanaka");
bundle.putInt("age", 25);

文字列、数値、真偽値、配列、Serializable など、さまざまなデータ型を保存できます。


■ Activity間のデータ受け渡し(画面遷移)

たとえば、「ログイン画面からメイン画面にユーザー名を渡す」ような場合:

● 送り側(MainActivity から SecondActivity)

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("username", "tanaka");  // Intent に直接データを追加(内部的には Bundle)
startActivity(intent);

実は putExtra() の内部では、Intent が持つ Bundle に値を入れています。

● 受け取り側(SecondActivity)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    Intent intent = getIntent();
    String username = intent.getStringExtra("username");

    TextView textView = findViewById(R.id.textView);
    textView.setText("ようこそ、" + username + "さん!");
}

getIntent().getStringExtra() で受け取れます。


Bundle を明示的に使いたい場合

Intent の putExtras()getExtras() を使って、まとめてデータを渡すこともできます。

Bundle bundle = new Bundle();
bundle.putString("username", "tanaka");
bundle.putInt("age", 25);

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtras(bundle);  // Intent にまとめて Bundle を渡す
startActivity(intent);

受け取り側では:

Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    String username = bundle.getString("username");
    int age = bundle.getInt("age");
}

■ Javaエンジニアとしての違和感?

  • Bundle の中身は 型安全ではない(キーのスペルミスなどはコンパイルで検知されない)
  • SerializableParcelable を使う必要がある(Javaのシリアライズと似て非なるParcelable
  • BundleIntent に入れられるものは、あくまで プリミティブ or 軽量データが前提

とはいえ、Activity間のデータ渡し=Intent+Bundleが標準的な方法なので、まずはこの形に慣れるのが一番です。


■ その他の用途(ちょっと先の話)

  • onSaveInstanceState()onRestoreInstanceState() の中でも Bundle は使われます(画面回転時の状態保持)
  • Fragment とのデータやりとりにも Bundle が使われます(setArguments() / getArguments()

■ まとめ

項目内容
Bundleとは?キーと値のマップ。Intentや状態保存に使われる
よく使うケースActivity間の画面遷移時に値を渡す
値の渡し方intent.putExtra() または intent.putExtras(bundle)
値の受け取り方intent.getStringExtra()intent.getExtras() から取得
注意点型安全でないためキーの間違いに注意

最初は冗長に感じるかもしれませんが、Androidでは頻出パターンなので早めに慣れておくと安心です。

mh

Related Posts

Android application development 第9章:イベントリスナーの定義(Java視点からの違和感に注意)

Androidアプリでも、JavaのGUI開発と同様に「ユー…

Android application development 第8章:XMLによるUI記述とコードの連携

■ なぜXMLでUIを書くのか? Androidアプリでは、…

You Missed

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

  • 投稿者 mh
  • 5月 10, 2025
  • 5 views

Android application development 第10章:Bundleを使ったデータの受け渡し

  • 投稿者 mh
  • 5月 10, 2025
  • 6 views

Kubernetes Learning 第5章:kubectl の基本操作(get / describe / logs / exec)

  • 投稿者 mh
  • 5月 9, 2025
  • 17 views

Android application development 第9章:イベントリスナーの定義(Java視点からの違和感に注意)

  • 投稿者 mh
  • 5月 9, 2025
  • 18 views

Android application development 第8章:XMLによるUI記述とコードの連携

  • 投稿者 mh
  • 5月 8, 2025
  • 29 views

Kubernetes Learning 第4章:Kubernetesを触ってみよう(最小構成で試す)

  • 投稿者 mh
  • 5月 8, 2025
  • 28 views