iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
1

ViewModel


ViewModel本身具有生命週期,可以在螢幕翻轉時讓數據保存不丟失,並配合MVVM的架構來達到數據與View(Activity、 Fragment)的分離,通常會與LiveData一起使用。

ViewModel生命週期表

ViewModel

class MyViewModel : ViewModel() {
    val info = MutableLiveData<String>()
}    

AndroidViewModel(需要Context時使用的)

class MyViewModel(application: Application) : AndroidViewModel(application) {
     val info = MutableLiveData<String>()
}

有兩種取得ViewModel方式

1.
val myViewModel = ViewModelProvider(
    this,
    ViewModelProvider.AndroidViewModelFactory.getInstance(application)
)
    .get(MyViewModel::class.java)

//Layout裡的TextView
info.setOnClickListener {
    myViewModel.info.value = "Hello JetPack!"
}

//ViewModel裡的LiveData
myViewModel.info.observe(this, Observer {
      info.text = it
})
2.build.gradle(Module)
android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation "androidx.fragment:fragment-ktx:1.3.2"
}
//AppCompatActivity
val myViewModel by viewModels<MyViewModel>()
//Fragment
val myViewModel by activityViewModels<MyViewModel>()

//Layout裡的TextView
info.setOnClickListener {
    myViewModel.info.value = "Hello JetPack!"
}

//ViewModel裡的LiveData
myViewModel.info.observe(this, Observer {
      info.text = it
})


上一篇
{Day6} LiveData
下一篇
{Day8} Coroutines
系列文
Kotlin Android Jetpack 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言