SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門

画面遷移を管理してくれるナビゲーションコンポーネント

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門 第15回

ナビゲーショングラフの作り方

 次に、ナビゲーショングラフの作り方を紹介します。

ナビゲーショングラフはnavigationフォルダに作成

 リスト4の(2)の属性値からもわかるように、ナビゲーショングラフはres/navigationフォルダに作成することになっています。ファイルそのものは、作成したnavigationを右クリックし、「New > Navigation Resource File」メニューを選択することで表示される図4のウィザード画面を利用するのが便利です。

 図4ではファイル名をnav_graphとしていますが、こちらは何でもかまいません。ただし、リスト4の(2)の属性値と一致している必要があります。

図4:ナビゲーショングラフファイルを作成するウィザード画面
図4:ナビゲーショングラフファイルを作成するウィザード画面

ナビゲーションエディタ上でデスティネーションを追加する

 ファイルが作成されると、初期状態では、図5の画面となっています。

図5:ナビゲーションエディタの初期画面
図5:ナビゲーションエディタの初期画面

 画面真ん中のメッセージあるように、ナビゲーションエディタ上で遷移に関係する画面を追加する場合は、左上のアイコンをクリックします。なお、ナビゲーションコンポーネントでは、この遷移に関係する画面類のことをデスティネーションDestination)と言います。

 アイコンをクリックすると、図6の吹き出しが表示されます。ここから、追加するデスティネーションを選択します。

図6:追加するデスティネーションを選択する吹き出し
図6:追加するデスティネーションを選択する吹き出し

 あらかじめプロジェクトにフラグメントが存在する場合は、それがリスト表示されます。一方、[Create new destination]を選択することで、図7のフラグメントの追加ウィザードが起動するので、そこから新規に追加することもできます。

図7:フラグメントの追加ウィザード
図7:フラグメントの追加ウィザード

 ここでは、あらかじめ作成していたメモリスト画面であるfragment_memo_listを選択します。すると、ナビゲーションエディタ上にfragment_memo_listが追加されて、図8の画面になります。

図8:fragment_memo_listが追加されたナビゲーションエディタ画面
図8:fragment_memo_listが追加されたナビゲーションエディタ画面

 同様に、メモ詳細画面であるfragment_memo_detailを選択します。するとナビゲーションエディタは、図9の画面になります。

図9:fragment_memo_detailが追加されたナビゲーションエディタ画面
図9:fragment_memo_detailが追加されたナビゲーションエディタ画面

ナビゲーションエディタ上でアクションを追加する

 デスティネーションが追加できたところで、ナビゲーションエディタに対して遷移を追加していきます。このデスティネーション間の遷移のことをアクションAction)といいます。これは、遷移元デスティネーションのアイコンを遷移先デスティネーションにドラッグして繋ぐだけです。本サンプルでは、メモリスト画面からメモ詳細画面への遷移なので、fragment_memo_listのアイコンをドラッグしてfragment_memo_detailに繋ぎます。すると、図10のように矢印が繋がった画面になり、アクションが追加されたことになります。

図10:アクションが追加されたナビゲーションエディタ画面
図10:アクションが追加されたナビゲーションエディタ画面

ナビゲーショングラフの実体はXMLデータ

 これでナビゲーショングラフが作成されたことになります。ここで、このナビゲーショングラフの実体を確認しておきましょう。そもそも、ナビゲーショングラフファイルの拡張子がxmlであることからわかるように、ナビゲーショングラフの実体はXMLデータです。レイアウトエディタ同様に、画面右上のアイコンをクリックすることで、画面がコードモードになり、その内容を確認できます。これは、リスト5の通りです。

[リスト5]res/navigation/nav_graph.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation  // (1)
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/navGraph"  // (2)
  app:startDestination="@id/memoListFragment">  // (3)

  <fragment  // (4)
    android:id="@+id/memoListFragment"  // (5)
    android:name="com.….MemoListFragment"  // (6)
    android:label="fragment_memo_list"  // (7)
    tools:layout="@layout/fragment_memo_list" >  // (8)
    <action  // (9)
      android:id="@+id/action_memoListFragment_to_memoDetailFragment"  // (10)
      app:destination="@id/memoDetailFragment" />  // (11)
  </fragment>
  <fragment  // (4)
    android:id="@+id/memoDetailFragment"
    android:name="com.….MemoDetailFragment"
    android:label="fragment_memo_detail"
    tools:layout="@layout/fragment_memo_detail" >
  </fragment>
</navigation>

 リスト5を見るとわかるように、ナビゲーショングラフのルートタグは(1)のnavigationタグです。そしてそのルートタグには、(2)のid属性と(3)のstartDestination属性が記述されています。startDestination属性は、その名称通り、このアプリケーションの最初の表示画面を設定します。これらの値は、ナビゲーションエディタを利用すると、自動で設定してくれるようになっています。

 各デスティネーションは、(4)のfragmentタグで定義します。これらもナビゲーションエディタ上で追加するだけで、属性も含めて自動で設定してくれます。

 実際、図8の右のAttributesツールウィンドウを参照すると、リスト5の(5)~(7)と同内容が見えます。それぞれの属性は、特に説明が必要ないぐらいお馴染みのもので、id属性の(5)、フラグメントクラスを指定する(6)のname属性、デスティネーションの名称である(7)のlabel属性、レイアウトファイルを指定する(8)のlayout属性です。

 アクションに関しては、遷移元のデスティネーションであるfragmentタグ内に、(9)のように、actionタグを定義します。属性は、少なくとも2個記述する必要があり、(10)のid属性と、遷移先デスティネーションのidを指定する(11)のdestinationです。もっとも、こちらもナビゲーションエディタ上で矢印を繋ぐだけで、自動で作成されます。

次のページ
ナビゲーションコンポーネントを利用した画面遷移コード

この記事は参考になりましたか?

一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22588 2025/11/27 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング