web-dev-qa-db-ja.com

Android BottomNavigationViewを使用したJetpack Navigationの適切なバックスタック

OBS:ファーストクラスのサポートはまだありませんが(これを書いている時点では)、Googleはサンプルを更新して、これを解決する方法の例を示しました: https://github.com/googlesamples/Android-architecture-components/tree/master/NavigationAdvancedSample

Android Codelab for Navigation は、アーキテクチャコンポーネントNavigationをBottomNavigationViewと一緒に使用する方法を説明します。しかし、BottomNavigationViewに2つのタブがあるとしましょう(Tab1Tab2Tab1でフラグメントFrag1をナビゲートするとします- >Frag2。今、私がTab2に行き、次にTab1に戻るたびに、 Frag1,2のフラグメントバックスタックはなくなり、開始点Frag1再び。

BottomNavigationViewNavigation と組み合わせて、タブを変更してもバックスタックをそのまま維持するには、アプリで何をする必要がありますか?また、ガイドラインに合わせてバックアップ/バックアップボタンの動作を維持します。

以前はViewPagerを使用してこれを行い、自分のバックスタックを管理していましたが、それは新しいナビゲーションでの正しいアプローチのようには感じられません。

前もって感謝します!


編集:

より複雑な答えがあります ここ

9
Algar

主な理由は、NavHostFragmentを1つだけ使用して、アプリのバックスタック全体を保持することです。

したがって、解決策は、各タブが独自のバックスタックを保持することです。

  • メインレイアウトで、各タブフラグメントをFrameLayoutで囲みます。
  • 各タブフラグメントはNavHostFragmentであり、各タブフラグメントに独自のバックスタックを持たせるために、独自のナビゲーショングラフが含まれています。
  • BottomNavigtionViewの可視性を処理するには、BottomNavigationView.OnNavigationItemSelectedListenerFrameLayoutに追加します。

すべてのフラグメントをメモリに保持したくない場合は、app:popUpToおよびapp:popUpToInclusive="true"を使用して、保持したくないフラグメントをポップアウトできます。

2
jaychang0917

これは現在、新しいナビゲーションアーキテクチャではサポートされていません。これも今日のアプリの非常に基本的な機能であり、多くのアプリが下部ナビゲーションを使用しているため、これにもかなり困惑しました。目が離せない場合は、実行中のスレッドがあります。彼らはこれに対する長期的な解決策を考え出すと言っていますが、短期的には、これに取り組む方法のサンプルを提供します。 https://issuetracker.google.com/issues/80029773#comment25

0
user2130331