問題タブ [android-jetpack-navigation]

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 投票する
9 に答える
34042 参照

android - Jetpack の Android ナビゲーション コンポーネントで破壊/再作成されたフラグメント

既存のアプリで、Jetpack のアーキテクチャ コンポーネントを使用してナビゲーションを実装しようとしています。

ListFragmentメイン フラグメント ( ) がアイテムのリストである単一のアクティビティ アプリがあります。現在、ユーザーがリスト項目をタップすると、2 番目のフラグメントが によってスタックに追加されますfragmentTransaction.add(R.id.main, detailFragment)。そのため、戻るを押すとDetailFragmentが外れ、ListFragmentが再び表示されます。

ナビゲーション アーキテクチャでは、これは自動的に処理されます。新しいフラグメントを追加する代わりに、それが置き換えられるため、フラグメントビューが破棄され、onDestroyView()呼び出されonCreateView()、ビューを再作成するために戻るが押されたときに呼び出されます。

これは、必要以上のメモリを使用しないようにLiveDataViewModelで使用される良いパターンであることは理解していますが、私の場合、リストのレイアウトが複雑で、それを膨らませると時間と CPU が消費されるため、これは面倒です。リストのスクロール位置を保存し、ユーザーがフラグメントを離れたのと同じ位置まで再度スクロールします。それは可能ですが、より良い方法が存在するはずです。

ビューをフラグメントのプライベート フィールドに「保存」し、既に存在する場合はそれを再利用しようとしましたonCreateView()が、アンチパターンのようです。

レイアウトの再膨張を避けるための、よりエレガントな方法はありますか?

0 投票する
0 に答える
120 参照

android - FragmentNavigation#navigate() の動作を #replace() の代わりに FragmentTransaction#add() で行う方法

私はフラグメントのビューを(ローカル変数として保存せずに)保存するために取り組んでおり、現在のナビゲーションコンポーネントではそれonDestroyView()が呼び出されているように見えます.Androidナビゲーションでの呼び出しを避けたいのですonDestroyView()が、あったように動作するメソッドはありませFragmentTransaction.add()ん私たちのバニラフラグメント。

Navigation Jetpack には次のものがあります。

FragmentNavigator.navigate()これは次のように利用しますfragmentTransaction.replace():

ft.add()方法の選択肢がないのはなぜですか?回避策がある場合、どうすればそれを実行できますか?

という概念ft.add()が打ち切られたようなものですか?

0 投票する
2 に答える
899 参照

android - RecyclerView、Android Jetpack ナビゲーション、折りたたみ式ツールバーで適切なスクロールを実現する

Android アプリケーションで次の設定を使用して、適切なスクロール動作を実装しようとしています。

Toolbarナビゲーションには、ジェットパック ナビゲーションをレイアウトとボトム ナビゲーションと組み合わせて使用​​します。私はまた、「1 つの活動、多くの断片」の原則を使用しています。下部のナビゲーションの各項目は、Fragment私のナビゲーション グラフに基づいて、対応する項目を起動します。これにはNavHostFragment、レイアウトで a を使用する必要があります。

私のToolbarレイアウトはアクティビティ レイアウトの一部であり、現在のフラグメントに基づいて入力されます。Toolbar一部のフラグメントには、必要に応じて追加される折りたたみが必要です。しかし、ツールバーが折りたたまれていると、次の問題に直面します。

特定のケースではToolbarNavHostFragmentが折りたたまれており、 にRecyclerView. 他の場合には、は の直接の子であるため、 に追加app:layout_behavior="@string/appbar_scrolling_view_behavior"してRecyclerView期待される結果を得ることができるようです。私の場合、は の子であり、これは基本的に(Layout Inspector によると) です。これは、が の直接の子ではないため、 の layout_behaviourが効果がないという問題につながります。RecyclerViewCoordinatorLayoutRecyclerViewFragmentFrameLayoutRecyclerViewRecyclerViewCoordinatorLayout

この問題の実用的な解決策を思い付くことができませんでした。誰かアイデアがありますか?

レイアウト/アクティビティの概要.xml

レイアウト/ツールバー.xml

レイアウト/list.xml

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

android - Android Jetpack ナビゲーション - 下部のナビゲーション ビューに正しいアイテムを通知する

第 2 レベルのフラグメントにディープ リンクしているときに、ナビゲーション UI が正しいボトム ナビゲーション ビュー項目を選択しないという問題が発生しています。

これが私が意味することです:

  • select fragment_reading_lists : 正しい下部ナビゲーション項目が選択されています
  • fragment_reading_listsから移動-> fragment_discover_landing : 正しい下部ナビゲーション項目が選択されています
  • fragment_reading_listsへのディープ リンク: 正しい下部ナビゲーション項目が選択されています
  • !! fragment_discover_landingへのディープ リンク: 正しい下部ナビゲーション項目が選択されていません!!

fragment_discover_landing にディープリンクするとどうなりますか? デフォルトの下部ナビゲーション項目が選択されています。

このインスタンスでどのアイテムを選択する必要があるかをボトム ナビゲーション アダプターに通知する方法はありますか?

ここに私のナビグラフがあります:

補足: これらのフラグメントはどちらも開始先ではありません。それがホーム フラグメントで、下部のナビゲーションの item1 です。fragment_reading_lists は、下部のナビゲーションにある item2 の最初のフラグメントです

0 投票する
2 に答える
2503 参照

android - Android ナビゲーション コンポーネント + ログイン フロー + ネストされた BottomNavigationView

下の画像のように、Android ナビゲーション コンポーネントを使用してナビゲーションを構築するのに苦労しています。

「ログインフロー」が必要です。ユーザーがログインしているかどうかを確認してから、アプリの主要部分に移動します (バックスタックもクリアします)。主要部分には、3 つのタブを持つ BottomNavigationView が含まれています。しかし、ツールバーの設定アイコンをクリックすると、フルスクリーンの SettingsFragment も表示したいと思います。

別々のナビゲーション グラフを持つ 2 つの NavHostFragments が必要でしたか? はいの場合、どうすればそれらを組み合わせて、適切な backNavigation を持つことができますか?

Androidナビゲーションコンポーネントを使用して、このようなナビゲーションを実現する方法はありますか?

ここに画像の説明を入力