ナビゲーショングラフの開始位置をプログラムで変更するには?
質問
基本的に、以下のようなナビゲーショングラフがあります。
ナビゲーショングラフの始点を
fragment 2
に戻るのを防ぐために)到達した直後に
fragment 1
に戻るのを防ぐため)。
これは私のコードです。
navGraph = navController.getGraph();
navGraph.setStartDestination(R.id.fragment2);
navController.setGraph(navGraph);
しかし、明らかにうまくいかず、次のように戻ってしまいます。
fragment 1
に戻ってしまいます。
私のやり方が悪いのでしょうか? 他に解決策はありますか?
どのように解決するのですか?
アップデートを行います。
このようなナビグラフがある場合
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
そして、2番目のフラグメントに移動してグラフのルートにしたい場合は、次のように指定します。
NavOptions
:
NavOptions navOptions = new NavOptions.Builder()
.setPopUpTo(R.id.firstFragment, true)
.build();
そして、それらをナビゲーションに使用します。
Navigation.findNavController(view).navigate(R.id.action_firstFragment_to_secondFragment, bundle, navOptions);
setPopUpTo(int destinationId, boolean inclusive)
- ナビゲートする前に、指定された目的地にポップアップします。これは、この目的地が見つかるまで、バックスタックからマッチしないすべての目的地をポップアップします。
destinationId
- 間にあるすべての目的地をクリアして、ポップアップする目的地です。
inclusive
- バックスタックから指定されたデスティネーションもポップアップする場合はtrueを指定します。
ALTERNATIVE:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:popUpTo="@+id/firstFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
そして、あなたのコードに
findNavController(fragment).navigate(
FirstFragmentDirections.actionFirstFragmentToSecondFragment())
古い答え
非推奨
:
は
clearTask
属性でアクションと関連する API を
NavOptions
は非推奨となりました。
出典 https://developer.android.com/jetpack/docs/release-notes
もし、ルートフラグメントを
fragment 2
に変更したい場合 (例.
fragment 2
を押すとアプリが終了します)、次の属性を
action
または
destination
:
app:clearTask="true"
実質的には次のようになります。
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment"
android:label="fragment_first" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:clearTask="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"
android:label="fragment_second"/>
を追加しました。
app:clearTask="true"
をアクションに追加しました。
これで、ナビゲーションを行う際に
fragment 1
から
fragment 2
は次のコードを使ってください。
Navigation.findNavController(view)
.navigate(R.id.action_firstFragment_to_secondFragment);
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み】プログレスダイアログとバックグラウンドスレッドがアクティブなときに、画面の向きが変わるのをどう処理するか?
-
[解決済み】Androidでステータスバーの色を変更する方法は?
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
Android Jetpackナビゲーション、BottomNavigationViewでYoutubeやInstagramのような適切なバックナビゲーション(フラグメントバックスタック)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Androidで他のフラグメントに移動した後、ナビゲーションスタックをクリアする方法
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] Android Navigation Architecture Component(Android Jetpack)を使用して、startDestinationを条件付きで設定することは可能ですか?