どろあそび (3)

引き続き「Android Kotlin の基礎」コースをやってみています。

レッスン3はナビゲーション、ページ的に画面を切り替えるフラグメント (Fragment) とフラグメント間の移動を設定するナビゲーション (Navigation)、そして外部アプリの機能を使用するインテント (Intent) を扱います。

レッスン3では画面間の遷移を扱うためかアプリケーションのレイアウトやコードをレッスン内ですべて書くのではなく、サンプルをダウンロードしてそれに必要な修正を行う形式になっています。

サンプルで書かれている内容にはこれまでのレッスンに含まれていない内容も入っていたので、テキストをちゃんと読むとともにコードやレイアウトも必要に応じて読んでおく方がいいと思います。

最初の項目「Create a fragment」はアプリのタイトル画面になるタイトルフラグメントを作成し、メインアクティビティに設定することでアプリ起動時にタイトル画面を表示する手順です。

Android Studioのフラグメント作成機能を使用するとフラグメントのテンプレートコードとレイアウトが自動的に作成されるのですが、このレッスンではレイアウトが既に用意されているので、レイアウトファイル名として適当なファイル名を指定し、フラグメント生成後にそのファイルを削除するよう指示されています。

また、テンプレートコードには補助的な機能がいくつか含まれているため、このレッスンではほぼ全部のコードを削除して必要最小限であるonCreateViewの実装だけを行います。

ところで、ファイルの削除には右クリックメニューのRefactorにあるSafe Deleteを使用するのが良さそうです。これは削除対象のファイルに対する参照がないかをチェックし、参照があればエラーを報告してくれるので、必要なファイルを誤って削除する可能性を抑えられます。

また、ここでバインディング (Binding) というのが新たに登場します。バインディングを使用するとfindViewByIdでレイアウトのIDからレイアウトのビューを取得する代わりにバインディングからビューが取得できるようになり、管理が容易になるとともにパフォーマンスが改善されるそうです。

バインディングについては「データ バインディング ライブラリ」および「ビュー バインディング」が参考になります。

2番目の項目「Define navigation paths」は複数のフラグメント間での画面遷移を指定する方法になります。

Android Studioのナビゲーションエディタを使用すると、フラグメント間を矢印でつなぐことで画面遷移をグラフィカルに指定することができます。しかし、画面遷移を発生するイベントをナビゲーションエディタで指定することはできないため、フラグメントのコードでイベントに対する応答として画面遷移を指示する必要があります。この時それぞれの画面遷移には遷移元と遷移先のフラグメント名で構成される名前が自動的につけられているので、画面遷移の指定自体は簡単になっています。

ただし、すべての遷移がイベントに結びつけられているかを確認する方法はなさそうなので、そこは目視かテストで確認する必要があるかもしれません。

なお、Android Studioで作成したアクティビティは作成時に選択したテンプレートによってはナビゲーション関連のライブラリへの参照が含まれていないので、ライブラリ参照追加の手順もこの項目で扱っています。

この項目では「戻る」ボタンの戻り先の指定方法も扱います。

例えばECアプリで決済完了画面が表示された後、「戻る」ボタンを押したら決済画面に戻るというのはあまりよろしくない状態で、購入画面や注文一覧画面に戻るのが適切だと思われます。

こういった「戻る」ボタンの戻り先はナビゲーションエディタで画面遷移の矢印を選択して「Pop Behavior」を指定することで変更することができます。

この時「戻る」ボタンの戻り先スタックに指定した戻り先を残すかどうかを指定することができるのですが、これの動作というか意味が実際のところよくわかりません。少し試してみる必要がありそうです。

また、アプリ画面上に戻るボタンを表示する機能もここで扱います。システムの「戻る」ボタンはアプリケーションを抜けてシステム画面あるいは直前の別アプリまで戻ることができますが、アプリ画面上の「戻る」ボタンはアプリの中で閉じた動作になるとともに表示を制御できるので使いやすそうです (ボタン位置がちょっと遠いけど)。

この項目ではさらにスライド表示されるメニューについても扱います。スライド表示されるメニューの起動ボタンはアプリ画面上の「戻る」ボタンと位置を共有するため、両方表示するのが可能かどうかはこのレッスンからはわかりません。

ここまでで複数の画面で遷移するアプリの作成に必要な基本的な機能は網羅されているようです。もちろん画面遷移に関連する機能だけですけど。

もう一つ、この項目の宿題で新しい画面遷移の追加がありますが、ここにちょっとした罠が仕掛けられています。この項目で学習した画面遷移の手順ではフラグメントのレイアウトがバインディングに対応している必要があるのですが、フラグメントのレイアウトをバインディングに対応させるための手順がすぐにわかるようには出てきていません。

自分はしっかりここでつまづきましたので、データバインディングとビューバインディングについて調べておいた方がいいと思います。

3番目の項目「Start an external Activity」ではフラグメント間でのデータの受け渡しと外部アプリケーションの呼び出しを扱います。

フラグメント間の画面遷移は手続き呼び出しの形式を取らないため、データの受け渡しでコンパイル時の型チェックが効かないという問題があります。

これを解消する手段として導入されたのがSafe Argsで、ナビゲーションエディタでフラグメントを選択してArgumentsに受け渡すデータの名前と型を指定すると、画面遷移の実行時に指定されたデータの受け渡しが必要になり、合わせてコンパイル時型チェックが行われます。

ナビゲーションと同様にAndroid Studioで作成したアクティビティは作成時に選択したテンプレートによってはSafe Args関連のライブラリへの参照が含まれていないので、ライブラリ参照追加の手順もこの項目で扱っています。

この項目では他のアプリとの連携方法であるインテント (Intent) のうち、必要な機能を指定して実行するアプリの選択をシステムに任せる暗黙のインテント (Implicit Intent) も扱います。

とりあえずここまでがレッスン3の内容でした。

ここまでくると通信や永続ストアを使用しない、かつテキストとボタン入力だけの簡単なアプリは作れそうな気がしますが、如何せん実用性のあるアプリを作るにはまだまだ学習が必要です。


bewise.jp

Be Wise: 賢くなろうということ

0コメント

  • 1000 / 1000