Android JetPack:ナビゲーションアーキテクチャコンポーネント

定型文が少なく、アプリのナビゲーションを簡単に制御できます。

昨年、GoogleはAndroid Architecture Componentsを発表しました。これは、定型コードを減らし、開発を加速することを目的とした一連のコンポーネントです。 Google IO 2018は、新しいコンポーネントを追加し、それらを既存のサポートライブラリと混合して、現在 Android Jetpack と呼ばれるものを作成しました。これは、アプリケーションのニーズに応じて追加できる、分類されたバンドルされていないライブラリのセットです。

ナビゲーションアーキテクチャコンポーネントはAndroidJetpackで導入され、アプリ内でのナビゲーションの実装を容易にすると同時に、エンドユーザーに一貫性のある予測可能なナビゲーションを提供するガイドラインを適用します。それらのガイドラインは何ですか?

それは有望なようです…もっと教えてください!

何よりもまず、必要なすべての依存関係を追加する必要があります。また、ナビゲーションコンポーネントを使用するには、Android Studio 3.2 Canary14が必要であることにも言及しておく価値があります。

また、 Safeargs — タイプセーフな方法で遷移間のデータ交換に対処するために作成されたナビゲーションコンポーネントプラグインを使用します。

ナビゲーショングラフ

このコンポーネントは、ナビゲーションをグラフとして処理します。各ノードは画面を表します。これらのノードは宛先と呼ばれ、アクションによって相互に制限されます。目的地とアクションのセットは、ナビゲーショングラフを構成します。

ナビゲーショングラフの作成から始めましょう。したがって、 res ディレクトリで New>に移動します。 Androidリソースファイルを選択し、リソースタイプリストからナビゲーションを選択します。新しく作成したナビゲーションディレクトリで、ナビゲーショングラフの作成を開始できます。

そこで、ナビゲーショングラフを作成しましたが、どこにもホストしていません。典型的な使用例は、ルートリソースでホストすることです。

android:name:フラグメントにNavHostとしてフラグを立てる属性—ユーザーがアプリ内を移動するときに宛先を交換できるようにするナビゲーショングラフのコンテナー。

app:navGraph: NavHostFragmentをナビゲーショングラフリソースに接続します。

app:defaultNavHost: trueに設定すると、NavHostFragmentはシステムの戻るボタンの押下を傍受できます。

これで、ナビゲーショングラフリソースのデザインエディタに移動して、 NavFragmentHostを保持しているリソースを確認できるようになります。

ナビゲーショングラフに目的地を追加する

簡単に始めて、グラフにAとBの2つのノードを追加しましょう。

上記のスニペットから、ナビゲーショングラフのエントリポイントを定義する app:startDestination について言及する価値があります。この場合、フラグメントAがナビゲーションスタックの最初の宛先であることを意味します。

宛先の接続

グラフに2つのノードがあるので、ナビゲーションフローの定義を開始できます。これはアクションを通じて行われます。私はすでにこれらについて話しました、覚えていますか? アクションは、グラフのエッジに相当するAndroidナビゲーションコンポーネントであり、目的地間を移動する意図を説明するために定義されています。

トリガーナビゲーション

目的地との接続を確立したので、次の動きは実際にその移行を?することですよね?現在、各NavHostには、次の2つの方法のいずれかで宛先を交換できるコントローラー( NavController )があります。

これは、甘い移行なしには完了しませんよね?そして、?のアイシングは、それを私たちの行動に結び付けるのがいかに簡単かということです:

app:enterAnim:スタックの最上位に移行する際のフラグメントBのアニメーションを定義します。

app:popEnterAnim:スタックの最上位にデータを入力するときのフラグメントAのアニメーション遷移。

app:exitAnim:スタックの一番下に遷移するフラグメントAのアニメーションを定義します。

app:popExitAnim:スタックを離れるフラグメントBのアニメーション遷移。

XMLが私の頼みの綱ですが、遷移はNavOptions.Builderのインスタンスを使用してプログラムで定義することもできます:

それは簡単でしたよね?それがどのようになったか見てみましょう! ?

ネストされたグラフ

架空のアプリに、プレミアムユーザーのみがアクセスできる画面フローがあると想像してみましょう。 ネストされたグラフは、このようなタイプの状況に対処するときに便利であり、宛先をカプセル化する機能を提供します。以下に表示されている次の b_graph の例 は、宛先 C D をカプセル化して、外部の宛先がBグラフへのアクションのみをトリガーできるようにします。エントリポイント。

宛先間でデータを渡す

架空のアプリにもう一度アクセスして、特定のフラグをある宛先から別の宛先に渡したいとしましょう?…おそらくBundleを使用しますが、公平を期すために問題ありません。それにもかかわらず、Navigation Componentは、 Safe args — 宛先とアクションに対して定義された引数にアクセスするためのタイプセーフなメカニズムを導入しました。開発者がランダムなバンドルを送信したり、間違ったキーでそれにアクセスしたりするのを防ぐと便利です。

最初に、送信する引数のタイプを定義する必要があります。

オリジンフラグメント側では、2つのデスティネーション間のアクションにアクセスし、目的の引数を添付する必要があります。 Safe argsは、宛先ごとにDirectionsクラスを生成し、そのアクションとそれぞれの引数にアクセスできるようにします。

情報を取得するために、変数として定義された引数を持つ生成されたクラスもあります。

とても簡単ですよね? ?

結論

ナビゲーションコンポーネントはその期待に応え、長期にわたる問題に対して本当にクリーンなソリューションを提供します。アプリ内で正しいガイドラインを適用し、ルーティングロジックをビューから切り離し、プロセス内の冗長なコードを減らすことは、本当に簡単な方法だと思います。私が対処したいディープリンクの問題はまだありますが、これは私のAndroid開発者の幸せに大きく貢献しているとすでに言えます。いいね! ?

このブログ投稿は以上です。完全なリファレンスチェックアウトについては、私のリポジトリ:https://github.com/pedroseabra1091/Android-Navigation。
これで、この新しいコンポーネントを試してみることにワクワクするのに十分だと思います。何か提案があれば、コメントを残してください! ?

Deemaze Software は、ウェブとモバイル向けの製品を開発しているデジタルエージェンシーです。 Twitter Facebook Instagram を通じて私たちの仕事を追跡します