Android開發(fā)(Kotlin) ViewModel基本用法示例詳解
ViewModel基本用法
創(chuàng)建viewmodel
class MyViewModel: ViewModel() {
}實現(xiàn)一個計數(shù)器
class MyViewModel : ViewModel() {
var count = 0
}在activity使用ViewModel,獲取ViewModel的實例需要通過ViewModelProvider。點擊按鈕一次計數(shù)器加1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
binding = ActivityClickBinding.inflate(layoutInflater)
setContentView(binding.root)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
binding.clickButC.setOnClickListener {
viewModel.count++
refreshCount()
}
refreshCount()
}
private fun refreshCount() {
binding.clickTvText.text = viewModel.count.toString()
}
旋轉屏幕后,計數(shù)器的數(shù)據(jù)仍然存在

向ViewModel傳遞參數(shù)
改進上面的例子,保證退出程序后,重新打開,數(shù)據(jù)任然存在。
修改viewmodel
class MyViewModel(counter: Int) : ViewModel() {
var count = counter
}counter記錄之前保存的值
創(chuàng)建ViewModelProvider.Factory ,向MyViewModel的構造函數(shù)傳遞數(shù)據(jù)。添加構造函數(shù),重寫create方法,
class MyViewModelFactory(private val counter: Int) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return MyViewModel(counter) as T
}
}修改activity
class ClickActivity : ComponentActivity() {
lateinit var viewModel: MyViewModel
lateinit var binding:ActivityClickBinding
lateinit var sp: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
binding = ActivityClickBinding.inflate(layoutInflater)
setContentView(binding.root)
sp = getSharedPreferences("data",MODE_PRIVATE)
val countSp = sp.getInt("count",0)
viewModel = ViewModelProvider(this, MyViewModelFactory(countSp)).get(MyViewModel::class.java)
binding.clickButC.setOnClickListener {
viewModel.count++
refreshCount()
}
refreshCount()
}
private fun refreshCount() {
binding.clickTvText.text = viewModel.count.toString()
}
override fun onPause() {
super.onPause()
sp.edit{
putInt("count",viewModel.count)
}
}
}到此這篇關于Android開發(fā)(Kotlin) ViewModel基本用法的文章就介紹到這了,更多相關Android ViewModel用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android 監(jiān)聽手機GPS打開狀態(tài)實現(xiàn)代碼
這篇文章主要介紹了Android 監(jiān)聽手機GPS打開狀態(tài)實現(xiàn)代碼的相關資料,需要的朋友可以參考下2017-05-05
Android應用第一次安裝成功點擊“打開”后Home鍵切出應用后再點擊桌面圖標返回導致應用重啟問題的解決方法
這篇文章主要介紹了Android應用第一次安裝成功點擊“打開”后Home鍵切出應用后再點擊桌面圖標返回導致應用重啟問題的解決方法,需要的朋友可以參考下2016-11-11
Android如何使用ViewPager2實現(xiàn)頁面滑動切換效果
這篇文章主要給大家介紹了關于Android如何使用ViewPager2實現(xiàn)頁面滑動切換效果的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-02-02
Android中利用動態(tài)加載實現(xiàn)手機淘寶的節(jié)日特效
這篇文章主要介紹了Android中利用動態(tài)加載實現(xiàn)手機淘寶的節(jié)日特效,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
Android實現(xiàn)千變萬化的ViewPager切換動畫
這篇文章主要為大家詳細介紹了Android實現(xiàn)千變萬化的ViewPager切換動畫,自定義PageTransformer實現(xiàn)個性的切換動畫,感興趣的小伙伴們可以參考一下2016-05-05
Flutter使用RepositoryProvider解決跨組件傳值問題
在實際開發(fā)過程中,經(jīng)常會遇到父子組件傳值的情況。本文將利用RepositoryProvider解決跨組件傳值的問題,感興趣的小伙伴可以了解一下2022-04-04

