在 Kotlin 中,ViewModel 用于管理 UI 控制器之間的數(shù)據(jù)流。它使得數(shù)據(jù)在設(shè)備方向更改或配置更改時(shí)保持不變。以下是使用 Kotlin 創(chuàng)建和處理 ViewModel 的步驟:
在 build.gradle 文件中添加以下依賴項(xiàng):
dependencies {
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
}
創(chuàng)建一個(gè)繼承自 ViewModel 的類,并定義要在 UI 控制器中使用的數(shù)據(jù)。例如:
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String> get() = _data
fun updateData(newData: String) {
_data.value = newData
}
}
這里我們創(chuàng)建了一個(gè)名為 MainViewModel 的 ViewModel 類,其中包含一個(gè) MutableLiveData 對(duì)象 _data
和一個(gè)用于訪問 _data
的 LiveData 對(duì)象 data
。我們還定義了一個(gè)名為 updateData
的方法,用于更新 _data
的值。
要在 UI 控制器中使用 ViewModel,首先需要獲取 ViewModel 實(shí)例,然后觀察 LiveData 對(duì)象。例如,在 Activity 或 Fragment 中:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.Observer
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 觀察 LiveData 對(duì)象
viewModel.data.observe(this, Observer { data ->
// 更新 UI,例如顯示數(shù)據(jù)在 TextView 中
textView.text = data
})
// 更新 LiveData 對(duì)象的值
button.setOnClickListener {
val newData = "新的數(shù)據(jù)"
viewModel.updateData(newData)
}
}
}
在這個(gè)例子中,我們?cè)?MainActivity 中獲取了 MainViewModel 的實(shí)例,并使用 observe
方法觀察了 data
LiveData 對(duì)象。當(dāng) data
發(fā)生變化時(shí),我們會(huì)在 Observer 的回調(diào)函數(shù)中更新 UI。我們還添加了一個(gè)按鈕點(diǎn)擊事件,用于更新 data
的值。
這就是使用 Kotlin 創(chuàng)建和處理 ViewModel 的基本方法。ViewModel 可以幫助你更好地管理 UI 控制器之間的數(shù)據(jù)流,并在設(shè)備方向更改或配置更改時(shí)保持?jǐn)?shù)據(jù)不變。