最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)(Kotlin) ViewModel基本用法示例詳解

 更新時間:2025年11月20日 10:10:25   作者:來來走走  
文章介紹了Android開發(fā)中ViewModel的基本用法,通過ViewModel實現(xiàn)一個計數(shù)器功能,并在Activity中使用ViewModel來管理數(shù)據(jù)狀態(tài),即使旋轉屏幕或退出程序,計數(shù)器數(shù)據(jù)仍然保持,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

托克逊县| 平山县| 苍梧县| 淮北市| 团风县| 宣汉县| 韩城市| 耒阳市| 东明县| 泰和县| 黄冈市| 林州市| 阜宁县| 容城县| 丹凤县| 西藏| 萨嘎县| 马关县| 辽宁省| 伊春市| 庄河市| 会宁县| 海兴县| 乌海市| 沈阳市| 昌宁县| 延川县| 革吉县| 德化县| 凤山市| 横峰县| 石景山区| 博湖县| 积石山| 重庆市| 芮城县| 阿尔山市| 布尔津县| 墨脱县| 呼伦贝尔市| 庆城县|