Closed4

作業ログ 2021/04/01

モガンボモガンボ

Kotlin

参考URL
https://inside.dmm.com/entry/2018/05/25/android-navigation

つまずきポイント

  • プリミティブの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
https://qiita.com/m-coder/items/b50f716f0443fd4948f5
https://stackoverflow.com/questions/50502269/illegalstateexception-link-does-not-have-a-navcontroller-set

モガンボモガンボ
  • 条件で初期起動画面が変わる場合
    1. 初期起動用Fragentを用意(StartFragment)しstartDistinationに指定
      • 遷移アクションに下記を指定(バックボタンで戻った際に表示されなくなる)
        • app:popUpTo="@id/startFragment"
        • app:popUpToInclusive="true"
    2. StartFragmentで各フラグメントへ振り分け
      • NavGraphに遷移アクション追加
      • FragmentのOnViewCreatedあたりで遷移処理実行
    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)
    }
モガンボモガンボ

safeargsを使用する

  1. プロジェクトのGradleに下記追加
    dependencies {
        // ~~~
        def nav_version = "2.3.4"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        // ~~~
    }
  1. モジュールのGradleに下記追加
plugins {
    // ~~~
    id 'androidx.navigation.safeargs.kotlin'
}
  1. ビルド

注意事項

  • フラグメント追加時は再ビルド
    • xxFragmentDistinationsとxxFragmentArgsが再ビルドしないと生成されない
このスクラップは2021/04/02にクローズされました