[解決済み] Android Navigation Architecture Component(Android Jetpack)を使用して、startDestinationを条件付きで設定することは可能ですか?
2023-06-30 21:29:37
質問
私は ナビゲーション から アンドロイドジェットパック を使って画面間を移動しています。 ここで、startDestinationを動的に設定したいと思います。
MainActivityという名前のActivityがあります。 FragmentA & FragmentBという2つのFragmentがあります。
var isAllSetUp : Boolean = // It is dynamic and I’m getting this from Preferences.
If(isAllSetUp)
{
// show FragmentA
}
else
{
//show FragmentB
}
Navigation Architecture Componentを使って上記のフローを設定したい。現在、私は以下のようにstartDestionationを使用していますが、それは私の要件を満たしていません。
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lrf_navigation"
app:startDestination="@id/fragmentA">
<fragment
android:id="@+id/fragmentA"
android:name="com.mindinventory.FragmentA"
android:label="fragment_a"
tools:layout="@layout/fragment_a" />
</navigation>
Android Navigation Architecture Componentを使用して、startDestinationを条件付きで設定することは可能でしょうか?
どのように解決するのですか?
ついに、私のクエリに対する解決策が見つかりました...。
以下のコードを
onCreate()
メソッドに
Activity
.
Kotlinのコード
val navHostFragment = (supportFragmentManager.findFragmentById(R.id.home_nav_fragment) as NavHostFragment)
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_main)
//graph.addArgument("argument", NavArgument)
graph.startDestination = R.id.fragment1
//or
//graph.startDestination = R.id.fragment2
navHostFragment.navController.graph = graph
Javaコード
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.home_nav_fragment); // Hostfragment
NavInflater inflater = navHostFragment.getNavController().getNavInflater();
NavGraph graph = inflater.inflate(R.navigation.nav_main);
//graph.addArgument("argument", NavArgument)
graph.setStartDestination(R.id.fragment1);
navHostFragment.getNavController().setGraph(graph);
navHostFragment.getNavController().getGraph().setDefaultArguments(getIntent().getExtras());
NavigationView navigationView = findViewById(R.id.navigationView);
NavigationUI.setupWithNavController(navigationView, navHostFragment.getNavController());
追加情報
artnest が提案したように
app:navGraph
属性を削除してください。削除後は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/home_nav_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true" />
</FrameLayout>
の場合は
fragment
タグの代わりに
FragmentContainerView
に変更しても、上記の変更は変わりません。
関連
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] Android: xml リソースからの整数値
最新
-
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 Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] 文字列リソースにHTML?