Navigation Architecture Component のドキュメントに従って、この新しいナビゲーションシステムの仕組みを理解しています。
ある画面から別の画面に移動/戻るには、NavHost
インターフェイスを実装するコンポーネントが必要です。
NavHostは空のビューであり、ユーザーがアプリをナビゲートすると宛先が入れ替わります。
しかし、現時点ではフラグメントのみがNavHost
を実装しているようです
ナビゲーションアーキテクチャコンポーネントのデフォルトのNavHost実装はNavHostFragmentです。
だから、私の質問は:
Activity
で実装できる非常にシンプルな画面を持っている場合でも、この新しいナビゲーションシステムで動作するには、実際のビューを含むFragment
をホストする必要がありますか?
Activity
は近い将来NavHost
インターフェイスを実装しますか?
-更新済み-
Ianhanniballakeの答えに基づいて、すべてのアクティビティには独自のナビゲーショングラフが含まれていることを理解しています。ただし、navコンポーネント(「古い」startActivity
呼び出しを置き換える)を使用して、あるアクティビティから別のアクティビティに移動する場合は、activity destinations
を使用できます。 activity destinations
とは何ですか 移行のドキュメント が詳細に説明されていないため、明確ではありません。
その後、アクティビティの宛先をナビゲーショングラフに追加して、コードベース全体でstartActivity()の既存の使用法を置き換えることで、個別のアクティビティをリンクできます。
ActivityNavigator
の代わりにstartActivity
を使用する利点はありますか?ActivityNavigator
を使用して、フラグメントをホストせずに、あるアクティビティから別のアクティビティにナビゲートすることができました。
ActivityNavigator(this)
.createDestination()
.setIntent(Intent(this, SecondActivity::class.Java))
.navigate(null, null)
ナビゲーショングラフは、単一のアクティビティ内にのみ存在します。 Migrate to Navigation guide のように、<activity>
宛先を使用してナビゲーショングラフ内からアクティビティを開始できますが、2番目のアクティビティが開始されると、元のナビゲーションとは完全に分離されますグラフ(独自のグラフを持つことも、単純なアクティビティにすることもできます)。
ビジュアルエディターを介して(+ボタンを押してからプロジェクト内のアクティビティを選択する)、またはXMLを手動で追加することで、アクティビティの宛先をナビゲーショングラフに追加できます。
<activity
Android:id="@+id/secondActivity"
Android:name="com.example.SecondActivity" />
次に、他の目的地と同じように使用して、そのアクティビティに移動できます(つまり、アクティビティを開始します)。
Navigation.findNavController(view).navigate(R.id.secondActivity);