web-dev-qa-db-ja.com

ナビゲーションアーキテクチャコンポーネント-アクティビティ

Navigation Architecture Component のドキュメントに従って、この新しいナビゲーションシステムの仕組みを理解しています。

ある画面から別の画面に移動/戻るには、NavHostインターフェイスを実装するコンポーネントが必要です。

NavHostは空のビューであり、ユーザーがアプリをナビゲートすると宛先が入れ替わります。

しかし、現時点ではフラグメントのみがNavHostを実装しているようです

ナビゲーションアーキテクチャコンポーネントのデフォルトのNavHost実装はNavHostFragmentです。

だから、私の質問は:

  • Activityで実装できる非常にシンプルな画面を持っている場合でも、この新しいナビゲーションシステムで動作するには、実際のビューを含むFragmentをホストする必要がありますか?

  • Activityは近い将来NavHostインターフェイスを実装しますか?

-更新済み-

Ianhanniballakeの答えに基づいて、すべてのアクティビティには独自のナビゲーショングラフが含まれていることを理解しています。ただし、navコンポーネント(「古い」startActivity呼び出しを置き換える)を使用して、あるアクティビティから別のアクティビティに移動する場合は、activity destinationsを使用できます。 activity destinationsとは何ですか 移行のドキュメント が詳細に説明されていないため、明確ではありません。

その後、アクティビティの宛先をナビゲーショングラフに追加して、コードベース全体でstartActivity()の既存の使用法を置き換えることで、個別のアクティビティをリンクできます。

  • ActivityNavigatorの代わりにstartActivityを使用する利点はありますか?
  • Navコンポーネントを使用する場合、アクティビティから適切な方法は何ですか?
24

ActivityNavigatorを使用して、フラグメントをホストせずに、あるアクティビティから別のアクティビティにナビゲートすることができました。

ActivityNavigator(this)
                    .createDestination()
                    .setIntent(Intent(this, SecondActivity::class.Java))
                    .navigate(null, null)
3

ナビゲーショングラフは、単一のアクティビティ内にのみ存在します。 Migrate to Navigation guide のように、<activity>宛先を使用してナビゲーショングラフ内からアクティビティを開始できますが、2番目のアクティビティが開始されると、元のナビゲーションとは完全に分離されますグラフ(独自のグラフを持つことも、単純なアクティビティにすることもできます)。

ビジュアルエディターを介して(+ボタンを押してからプロジェクト内のアクティビティを選択する)、またはXMLを手動で追加することで、アクティビティの宛先をナビゲーショングラフに追加できます。

<activity
    Android:id="@+id/secondActivity"
    Android:name="com.example.SecondActivity" />

次に、他の目的地と同じように使用して、そのアクティビティに移動できます(つまり、アクティビティを開始します)。

Navigation.findNavController(view).navigate(R.id.secondActivity);
27
ianhanniballake