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
が良さげ
参考にしたサイト
Flow, SharedFlow, StateFlow周り
Corountine のガイド日本語訳
サンプルアプリ作成にお世話になったとこ
スコープ周り
Zennを使うに至ったサイト
命名周りのもやもや
- AndroidStudioでActicivty、Fragmentを作成すると
XXActivity(Fragment).kt
とactivity(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にクローズされました