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

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

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

ViewModel基本用法

創(chuàng)建viewmodel

class MyViewModel: ViewModel() {
}

實(shí)現(xiàn)一個(gè)計(jì)數(shù)器

class MyViewModel : ViewModel() {
    var count = 0
}

在activity使用ViewModel,獲取ViewModel的實(shí)例需要通過ViewModelProvider。點(diǎn)擊按鈕一次計(jì)數(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()
    }

旋轉(zhuǎn)屏幕后,計(jì)數(shù)器的數(shù)據(jù)仍然存在

向ViewModel傳遞參數(shù)

改進(jìn)上面的例子,保證退出程序后,重新打開,數(shù)據(jù)任然存在。
修改viewmodel

class MyViewModel(counter: Int) : ViewModel() {
    var count = counter
}

counter記錄之前保存的值
創(chuàng)建ViewModelProvider.Factory ,向MyViewModel的構(gòu)造函數(shù)傳遞數(shù)據(jù)。添加構(gòu)造函數(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)
        }
    }
}

到此這篇關(guān)于Android開發(fā)(Kotlin) ViewModel基本用法的文章就介紹到這了,更多相關(guān)Android ViewModel用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

洞头县| 呼图壁县| 临漳县| 韩城市| 广德县| 宜川县| 江北区| 金沙县| 德钦县| 察哈| 永兴县| 廉江市| 绍兴市| 乌鲁木齐县| 蛟河市| 信阳市| 郎溪县| 澄江县| 通化市| 宁海县| 南丰县| 双牌县| 陵水| 运城市| 左贡县| 崇文区| 合水县| 股票| 布尔津县| 平凉市| 临安市| 白银市| 德州市| 西藏| 合江县| 黑山县| 武义县| 陇南市| 泗阳县| 广南县| 祁东县|