Closed9

作業ログ 2021/03/18

モガンボモガンボ

Kotlinスタディ

  • LiveDataとかCoroutinesとかStateFlowとか
  • Navigateとは???
    • アクション指定すればID呼ぶだけで遷移できる?
    • FragmentManagerとかが要らなくなるのでは?
モガンボモガンボ

LiveData, StateFlow周り

  • 外からも変えられるものはMutableXXXでViewModelに定義
  • 外から変えたくないものはprivateでMutableXXXを定義しpublicでXXXを定義
  • Model <-> ViewModelはStateFlow、ViewModel <-> View はLiveDataが良さげ
モガンボモガンボ

命名周りのもやもや

  • AndroidStudioでActicivty、Fragmentを作成するとXXActivity(Fragment).ktactivity(fragment)_xx.xmlが自動生成される
  • ただ、Bindingはxmlを元に作成されるので例えばTestFragment.ktのBindingはFragmentTestBindingとなる
  • まぁそういうものって割り切ればいいんだけどなんかもやっとする
  • ただxmlの方は名前変えたくないなぁって感じ
モガンボモガンボ

Corountine周りを使用するためのGradleの設定

モジュール

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt' // 追加
}
android {
    // -- 省略

    buildFeatures {
        dataBinding true
    }

    dataBinding {
        enabled = true
    }

    // -- 省略
}
dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' // 追加

    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0'  // 追加
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0' // 追加 
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0' // 追加

    implementation 'com.google.android.material:material:1.3.0'

    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4' // 追加
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.4' // 追加
    implementation 'androidx.legacy:legacy-support-v4:1.0.0' // 追加

    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
モガンボモガンボ

疑問

  • ToastとかSnackbarとかの表示処理どこに置くか問題
    • FragmentActivityの場合、表示処理はActivityに置くべき?
    • ActivityのViewModelに変数持たせて監視するのが良さげ?
モガンボモガンボ

ViewBinding使用のための設定

Gradle

viewBinding {
    enabled = true
}

使用方法

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // バインディング
        binding = ActivityMainBinding.inflate(layoutInflater)
            .apply { setContentView(this.rootLayout) }
        // 使用方法(下記でxmlのidに紐付いたViewを取得可能)
        binding.rootLayout
    }

Bindingの命名

@+id/root_layout -> rootLayout

このスクラップは2021/03/19にクローズされました