問題タブ [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.
android - Jetpack の Android ナビゲーション コンポーネントで破壊/再作成されたフラグメント
既存のアプリで、Jetpack のアーキテクチャ コンポーネントを使用してナビゲーションを実装しようとしています。
ListFragment
メイン フラグメント ( ) がアイテムのリストである単一のアクティビティ アプリがあります。現在、ユーザーがリスト項目をタップすると、2 番目のフラグメントが によってスタックに追加されますfragmentTransaction.add(R.id.main, detailFragment)
。そのため、戻るを押すとDetailFragment
が外れ、ListFragment
が再び表示されます。
ナビゲーション アーキテクチャでは、これは自動的に処理されます。新しいフラグメントを追加する代わりに、それが置き換えられるため、フラグメントビューが破棄され、onDestroyView()
呼び出されonCreateView()
、ビューを再作成するために戻るが押されたときに呼び出されます。
これは、必要以上のメモリを使用しないようにLiveDataとViewModelで使用される良いパターンであることは理解していますが、私の場合、リストのレイアウトが複雑で、それを膨らませると時間と CPU が消費されるため、これは面倒です。リストのスクロール位置を保存し、ユーザーがフラグメントを離れたのと同じ位置まで再度スクロールします。それは可能ですが、より良い方法が存在するはずです。
ビューをフラグメントのプライベート フィールドに「保存」し、既に存在する場合はそれを再利用しようとしましたonCreateView()
が、アンチパターンのようです。
レイアウトの再膨張を避けるための、よりエレガントな方法はありますか?
android - FragmentNavigation#navigate() の動作を #replace() の代わりに FragmentTransaction#add() で行う方法
私はフラグメントのビューを(ローカル変数として保存せずに)保存するために取り組んでおり、現在のナビゲーションコンポーネントではそれonDestroyView()
が呼び出されているように見えます.Androidナビゲーションでの呼び出しを避けたいのですonDestroyView()
が、あったように動作するメソッドはありませFragmentTransaction.add()
ん私たちのバニラフラグメント。
Navigation Jetpack には次のものがあります。
FragmentNavigator.navigate()
これは次のように利用しますfragmentTransaction.replace()
:
ft.add()
方法の選択肢がないのはなぜですか?回避策がある場合、どうすればそれを実行できますか?
という概念ft.add()
が打ち切られたようなものですか?
android - RecyclerView、Android Jetpack ナビゲーション、折りたたみ式ツールバーで適切なスクロールを実現する
Android アプリケーションで次の設定を使用して、適切なスクロール動作を実装しようとしています。
Toolbar
ナビゲーションには、ジェットパック ナビゲーションをレイアウトとボトム ナビゲーションと組み合わせて使用します。私はまた、「1 つの活動、多くの断片」の原則を使用しています。下部のナビゲーションの各項目は、Fragment
私のナビゲーション グラフに基づいて、対応する項目を起動します。これにはNavHostFragment
、レイアウトで a を使用する必要があります。
私のToolbar
レイアウトはアクティビティ レイアウトの一部であり、現在のフラグメントに基づいて入力されます。Toolbar
一部のフラグメントには、必要に応じて追加される折りたたみが必要です。しかし、ツールバーが折りたたまれていると、次の問題に直面します。
特定のケースではToolbar
、NavHostFragment
が折りたたまれており、 にRecyclerView
. 他の場合には、は の直接の子であるため、 に追加app:layout_behavior="@string/appbar_scrolling_view_behavior"
してRecyclerView
期待される結果を得ることができるようです。私の場合、は の子であり、これは基本的に(Layout Inspector によると) です。これは、が の直接の子ではないため、 の layout_behaviourが効果がないという問題につながります。RecyclerView
CoordinatorLayout
RecyclerView
Fragment
FrameLayout
RecyclerView
RecyclerView
CoordinatorLayout
この問題の実用的な解決策を思い付くことができませんでした。誰かアイデアがありますか?
レイアウト/アクティビティの概要.xml
レイアウト/ツールバー.xml
レイアウト/list.xml
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 の最初のフラグメントです
android - Android ナビゲーション コンポーネント + ログイン フロー + ネストされた BottomNavigationView
下の画像のように、Android ナビゲーション コンポーネントを使用してナビゲーションを構築するのに苦労しています。
「ログインフロー」が必要です。ユーザーがログインしているかどうかを確認してから、アプリの主要部分に移動します (バックスタックもクリアします)。主要部分には、3 つのタブを持つ BottomNavigationView が含まれています。しかし、ツールバーの設定アイコンをクリックすると、フルスクリーンの SettingsFragment も表示したいと思います。
別々のナビゲーション グラフを持つ 2 つの NavHostFragments が必要でしたか? はいの場合、どうすればそれらを組み合わせて、適切な backNavigation を持つことができますか?
Androidナビゲーションコンポーネントを使用して、このようなナビゲーションを実現する方法はありますか?