OBS:ファーストクラスのサポートはまだありませんが(これを書いている時点では)、Googleはサンプルを更新して、これを解決する方法の例を示しました: https://github.com/googlesamples/Android-architecture-components/tree/master/NavigationAdvancedSample
Android Codelab for Navigation は、アーキテクチャコンポーネントNavigationをBottomNavigationView
と一緒に使用する方法を説明します。しかし、BottomNavigationView
に2つのタブがあるとしましょう(Tab1とTab2。 Tab1でフラグメントFrag1をナビゲートするとします- >Frag2。今、私がTab2に行き、次にTab1に戻るたびに、 Frag1,2のフラグメントバックスタックはなくなり、開始点Frag1再び。
BottomNavigationView
を Navigation と組み合わせて、タブを変更してもバックスタックをそのまま維持するには、アプリで何をする必要がありますか?また、ガイドラインに合わせてバックアップ/バックアップボタンの動作を維持します。
以前はViewPager
を使用してこれを行い、自分のバックスタックを管理していましたが、それは新しいナビゲーションでの正しいアプローチのようには感じられません。
前もって感謝します!
編集:
より複雑な答えがあります ここ 。
主な理由は、NavHostFragment
を1つだけ使用して、アプリのバックスタック全体を保持することです。
したがって、解決策は、各タブが独自のバックスタックを保持することです。
FrameLayout
で囲みます。NavHostFragment
であり、各タブフラグメントに独自のバックスタックを持たせるために、独自のナビゲーショングラフが含まれています。BottomNavigtionView
の可視性を処理するには、BottomNavigationView.OnNavigationItemSelectedListener
をFrameLayout
に追加します。すべてのフラグメントをメモリに保持したくない場合は、app:popUpTo
およびapp:popUpToInclusive="true"
を使用して、保持したくないフラグメントをポップアウトできます。
これは現在、新しいナビゲーションアーキテクチャではサポートされていません。これも今日のアプリの非常に基本的な機能であり、多くのアプリが下部ナビゲーションを使用しているため、これにもかなり困惑しました。目が離せない場合は、実行中のスレッドがあります。彼らはこれに対する長期的な解決策を考え出すと言っていますが、短期的には、これに取り組む方法のサンプルを提供します。 https://issuetracker.google.com/issues/80029773#comment25