Closed4
作業ログ 2021/04/01
Kotlin
Navigation
参考URL
つまずきポイント
- プリミティブのNullableを渡したい場合はStringにする
- BackStackChangedListenerが反応しない
- 代替手段が必要
- 下記のように設定
// NavHostFragmentを取得(MainActivityのFragmentContainerから)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.main_fragment_container) as NavHostFragment
setupActionBarWithNavController(
// 取得したNavHostFragmentのNavControllerを指定
navHostFragment.findNavController(),
// 指定したFragmentでのみバックボタンを表示しないようにする
AppBarConfiguration(setOf(R.id.categoryListFragment))
)
参考URL
NavGraph
NavGraphで初期起動画面を複数用意したい
- 条件で初期起動画面が変わる場合
- 初期起動用Fragentを用意(
StartFragment
)しstartDistinationに指定- 遷移アクションに下記を指定(バックボタンで戻った際に表示されなくなる)
app:popUpTo="@id/startFragment"
app:popUpToInclusive="true"
- 遷移アクションに下記を指定(バックボタンで戻った際に表示されなくなる)
- StartFragmentで各フラグメントへ振り分け
- NavGraphに遷移アクション追加
- FragmentのOnViewCreatedあたりで遷移処理実行
- 初期起動用Fragentを用意(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val navDestination = when(condition){
A -> {
StartFragmentDirections.actionStartFragmentToAFragment()
}
B -> {
StartFragmentDirections.actionStartFragmentToBFragment()
}
C -> {
StartFragmentDirections.actionStartFragmentToCFragment()
}
}
findNavController().navigate(navDestination)
}
NavGraph
safeargs
を使用する
- プロジェクトのGradleに下記追加
dependencies {
// ~~~
def nav_version = "2.3.4"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
// ~~~
}
- モジュールのGradleに下記追加
plugins {
// ~~~
id 'androidx.navigation.safeargs.kotlin'
}
- ビルド
注意事項
- フラグメント追加時は再ビルド
- xxFragmentDistinationsとxxFragmentArgsが再ビルドしないと生成されない
このスクラップは2021/04/02にクローズされました