アクティビティ間でデータの受け渡しを行う方法
アクティビティ間でデータの受け渡しを行いたい
Android Studioでアクティビティを切り替えて画面を遷移する方法 - Android Studioでアプリ開発!では、Androidアプリの基本となる画面遷移の方法を紹介しました。単純な画面遷移ならこの方法だけでいいのですが、画面間に関連がある場合、データの受け渡しが必要になってきます。
今回は、画面間でデータを受け渡す方法を紹介したいと思います。
完成イメージ
ActivityFirst と ActivitySecond 間で「遷移した回数」というデータを受け渡しします。それぞれの画面に遷移したときに「遷移した回数」を +1 し、Toast で表示しています。
アクティビティのレイアウトを設定する
Android Studioでアクティビティを切り替えて画面を遷移する方法 - Android Studioでアプリ開発!で作成したレイアウトファイルをそのまま使います。
プログラムを記述する
今回の肝となるのは以下の点です。
・メンバ変数に「遷移した回数」を追加
・onCreate() メソッドで Intent を取得し、getIntExtra() で、キーを元に渡されたデータを受け取る
・onClick() メソッドの putExtra() で渡したいデータをキーとともに指定する
ActivityFirst は以下のようになります。
package com.example.transitiontest; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.content.Intent; import android.widget.Toast; public class ActivityFirst extends Activity { private int mTransitionCount; // 遷移した回数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); // Intent を取得する Intent intent = getIntent(); // キーを元にデータを取得する(データがない場合、第2引数の 0 が返る) mTransitionCount = intent.getIntExtra("TransitionCount", 0); // 遷移した回数を +1 する mTransitionCount++; // 遷移した回数を Toast で表示する Toast toast = Toast.makeText(this, String.format("遷移した回数:%d", mTransitionCount), Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 0, 150); toast.show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_first, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void onClick(View view){ switch (view.getId()){ case R.id.btnToSecond: // Intent のインスタンスを取得する Intent intent = new Intent(this, ActivitySecond.class); // 渡したいデータとキーを指定する intent.putExtra("TransitionCount", mTransitionCount); // 遷移先の画面を呼び出す startActivity(intent); break; } } }
ActivitySecond は以下のようになります。
package com.example.transitiontest; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.content.Intent; import android.widget.Toast; public class ActivitySecond extends Activity { private int mTransitionCount; // 遷移した回数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // Intent を取得する Intent intent = getIntent(); // キーを元にデータを取得する(データがない場合、第2引数の 0 が返る) mTransitionCount = intent.getIntExtra("TransitionCount", 0); // 遷移した回数を +1 する mTransitionCount++; // 遷移した回数を Toast で表示する Toast toast = Toast.makeText(this, String.format("遷移した回数:%d", mTransitionCount), Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 0, 150); toast.show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_second, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void onClick(View view){ switch (view.getId()){ case R.id.btnToFirst: // Intent のインスタンスを取得する Intent intent = new Intent(this, ActivityFirst.class); // 渡したいデータとキーを指定する intent.putExtra("TransitionCount", mTransitionCount); // 遷移先の画面を呼び出す startActivity(intent); break; } } }
以上の実装で完成イメージのように動作します。
まとめ
アクティビティ間でデータの受け渡しを行う方法を説明しました。データを渡す場合は、Intent の putExtra() メソッドでキーとデータを指定しました。データを受け取る場合は、getIntExtra() メソッドでキーを元にデータを取得しました。
今回は int型のデータを受け渡ししましたが、String型などを受け渡すことができます。注意しなければならないのは、受け取る側はデータの型に応じて呼び出すメソッドを変える必要がある点です( Int型ならgetIntExtra()、String型ならgetStringExtra() )。
画面間のデータの受け渡しは Androidアプリ開発において頻繁に出てきます。ぜひともマスターしておきたい方法です。
参考
Toast を使って画面に情報を表示する方法 - Android Studioでアプリ開発!
Android StudioではじめるAndroidプログラミング入門
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2014/04
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: 柴田文彦,川口仁
- 出版社/メーカー: インプレス
- 発売日: 2014/01/16
- メディア: Kindle版
- この商品を含むブログ (1件) を見る