問題タブ [android-navigation-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2679 参照

android - ナビゲーション コンポーネントを使用してフラグメントがバックスタックに追加されない

情報:

NavHostFragmentアプリの for each 機能をプログラムで挿入しています。それぞれNavHostFragmentに独自のナビゲーション グラフがあります。ダガーは、FragmentFactory各機能に固有のものを使用してそれらを提供しています。これは、MVVM アーキテクチャを使用した単一アクティビティ構造です。

レポ: https://github.com/mitchtabian/DaggerMultiFeature/tree/nav-component-backstack-bug

ブランチ「nav-component-backstack-bug」をチェックアウトします。


問題

グラフに移動すると、フラグメントがバックスタックに追加されません。追加される唯一のフラグメントは、最近アクセスされたフラグメントです。したがって、スタック サイズは常に 1 のままです。

FragmentFactoryもともと を に設定していなかったからだと思っていましたChildFragmentManagerが、何も変わりません。関連するコードについては、以下のコード スニペットを参照してください。または、プロジェクトをチェックアウトして実行します。と から現在バックスタックにあるフラグメントを出力するログがChildFragmentManagerありSupportFragmentManagerます。両方とも 1 の定数サイズを持ちます。


Feature1NavHostFragment.kt

カスタムNavHostFragmentの一つです。create()コンパニオン オブジェクトの機能は、それらを作成する方法です。


MainActivity.kt

これは、NavHostFragmentMainActivity で を作成する方法の例です。


Feature1MainFragment.kt

これは、グラフ内の他のフラグメントに移動する方法の例です。


概要

私が言ったように、すべてのフラグメントで、ChildFragmentManagerと の両方のバックスタックを出力していSupportFragmentManagerます。両方とも 1 の一定サイズです。スタックに追加されるのではなく、グラフに移動すると、フラグメントが置き換えられているようです。

とにかく、これを読んでくれてありがとう。