Androidアプリの画面遷移 ~ アクティビティの起動をつかさどるIntentクラス
Android Studio 2で始めるアプリ開発入門 第7回
Androidの画面遷移(1)
それでは、今回のメインテーマである画面遷移について扱っていきましょう。
上で作成したメニューリストをタップすると、画面が遷移し、以下の注文完了画面が表示されるようにしていきます。
ファイルの追加
第3回「Androidアプリ開発の基本~ビューとアクティビティ」で解説したとおり、AndroidではActivityクラスとレイアウトxmlファイルのペアでひとつの画面が成り立っています。したがって、画面を追加するには、app/Javaフォルダの所定のパッケージ内にActivityクラスを、res/layoutフォルダにレイアウトxmlファイルを追加し、さらに、AndroidManifest.xmlに追加されたActivityを登録するという、3種の作業をしなければなりません。
Android Studioではこの3種の作業をまとめて行ってくれる機能があります。Fileメニューから
[New]>[Activity]>[Empty Activity]
を選択してください。以下のようなウィザード画面が表示されます。
以下の情報を入力し、「Finish」をクリックしてください。
- Activity Name: MenuThanksActivity
- Layout Name: activity_menu_thanks
- Package name: com.websarva.wings.android.intentsample
- TargetSource Set: main
すると、所定の位置にMenuThanksActivityクラスとactivity_menu_thanks.xmlファイルが追加され、さらに、AndroidManifest.xmlに
<activity android:name=".MenuThanksActivity"> </activity>
が追記されていることが確認できます。
ソースコードの記述
それではソースコードを記述していきます。activity_menu_thanks.xmlに関しては、特に解説する内容はありませんので、ダウンロードサンプルのソースコードを参照してください。
まず、MenuListActivityにソースコードを追記していきます。リストをタップした時に完了画面に遷移しますので、リストタップのリスナクラスの作成と、その登録を記述していきます。
public class MenuListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
~省略~
lvMenu.setOnItemClickListener(new ListItemClickListener()); // (7)
}
private class ListItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Map<String, String> item = (Map<String, String>) parent.getItemAtPosition(position); // (8)
String menuName = item.get("name"); // (9)
String menuPrice = item.get("price"); // (9)
Intent intent = new Intent(MenuListActivity.this, MenuThanksActivity.class); // (10)
intent.putExtra("menuName", menuName); // (11)
intent.putExtra("menuPrice", menuPrice); // (11)
startActivity(intent); // (12)
}
}
}
MenuListActivity内に、メンバクラスとしてリスナクラスを作成し、(7)でそれを登録しています。
今回のListViewは、各データとしてMap<String, String>を使用しています。従って、positionを使ったタップデータの取得について、getItemAtPosition()の戻り値の型はMap<String, String>となります。これが(8)です。そのMap内からメニュー名、価格を取得しているのが(9)です。
(10)~(12)の記述に関しては後述します。
次に、MenuThanksActivityに以下のソースコードを追加してください。
public class MenuThanksActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
~省略~
Intent intent = getIntent(); // (1)
String menuName = intent.getStringExtra("menuName"); // (2)
String menuPrice = intent.getStringExtra("menuPrice"); // (2)
TextView tvMenuName = (TextView) findViewById(R.id.tvMenuName);
TextView tvMenuPrice = (TextView) findViewById(R.id.tvMenuPrice);
tvMenuName.setText(menuName);
tvMenuPrice.setText(menuPrice);
}
public void onBackButtonClick(View view) { // (3)
finish(); // (4)
}
}
一通りのコーディングが終了したら、アプリを再起動し、動作確認を行ってください。リストをタップすると、注文完了画面が表示されることが確認できます。さらに、単なる注文完了画面ではなく、リストでタップした定食名と金額がちゃんと表示されています。
どのように処理を記述すれば、こういうことが可能なのか、以下に解説してきます。
Androidの画面遷移の特徴
その前に、先にここで、Androidの画面遷移の特徴を解説します。実はAndroidの画面遷移というのは、「遷移」と呼ぶにはふさわしくない挙動なのです。
例えば、リストを一番下までスクロールした状態で「焼き魚定食」をタップして、注文完了画面を表示させます。その上で、「リストに戻る」ボタンをタップして表示されたリストというのは、注文完了画面を表示させる前の状態そのままで表示されます。
これを図にすると以下のようになります。
Androidでは画面は「遷移」するのではなく、元ある画面の上に画面が乗る形で表示されます。リスト画面をタップし、注文完了画面に「遷移」するのではなく、注文完了画面が新たに起動し、リスト画面の上に表示されます。戻るボタンタップ時には、起動している注文完了画面を終了させ、画面そのものを消滅させます。そのことで裏に隠れていたリスト画面が表に出てくるという挙動なのです。
この記事は参考になりましたか?
- Android Studio 2で始めるアプリ開発入門連載記事一覧
- この記事の著者
-
WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
