Android Architecture Components 勉強会 #3
https://gdg-tokyo.connpass.com/event/79370/
Empty Activity で新しい Kotlin プロジェクトを作ろう
※(パッケージ名は com.sample.viewmodel を想定)
apply plugin: 'kotlin-kapt'
// ...
dependencies {
implementation "com.android.support:appcompat-v7:27.0.2"
// ...
implementation "android.arch.lifecycle:extensions:1.1.0"
kapt "android.arch.lifecycle:compiler:1.1.0"
}
ViewModel を継承した UserViewModel に書き換えよう
class UserViewModel {
private var user: User? = null
fun getUser(): User? {
if (user == null) {
load()
}
return user
}
private fun load() {
user = User("Hanyu", 23)
}
}
data class User(val name: String, val age: Int)
継承したUserViewModelをActivity内で使ってみよう
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val user = UserViewModel()
Log.d("OLYMPICS", user.getUser()?.toString())
}
}
Fragment 内で userA/B/C が同じか確認しよう
class DogFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val userA = ViewModelProviders.of(this).get(UserViewModel::class.java)
val userB = ViewModelProviders.of(activity!!).get(UserViewModel::class.java)
val userC = ViewModelProviders.of(this).get(UserViewModel::class.java)
}
}
2つのFragment 内で user が同じか確認しよう
class TopFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val user = ViewModelProviders.of(this).get(UserViewModel::class.java)
}
}
class BottomFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val user = ViewModelProviders.of(this).get(UserViewModel::class.java)
}
}