HarmonyOS 鸿蒙Next中ViewModel(1)

HarmonyOS 鸿蒙Next中ViewModel(1)

ViewModel

ViewModel的生命周期和Activity不同,专门用来存放和页面相关的数据,手机屏幕旋转时,Activity会重新创建,而ViewModel不会,只有Activity退出时,ViewModel才会销毁

binding的初始化应该在onCreate中进行,否则layoutInflater可能还没有被初始化

简单用法:

  1. 添加依赖
implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
  1. 给每一个Activity或者Fragment都创建对应的ViewModel并继承于ViewModel,添加需要的存储的数据变量
class MainViewModel : ViewModel() {
    var counter=0
}
  1. 在活动中通过ViewModelProvider创建ViewModel的实例 ,不能直接在onCreate中创建ViewModel的实例,因为这样的话,每次重启Activity都会创建新的ViewModel实例,数据得不到保存,所以要用ViewModelProvider
class MainActivity : AppCompatActivity() {
    lateinit var viewModel:MainViewModel
    lateinit var binding:ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding=ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        viewModel=ViewModelProvider(this).get(MainViewModel::class.java)
        binding.plusOneBtn.setOnClickListener{
            viewModel.counter++
            refreshCounter()
        }
        refreshCounter()
    }
    private fun refreshCounter(){
        binding.infoText.text=viewModel.counter.toString()
    }
}

但是这样直接退出应用再重启,ViewModel存储的值也会清空,想要实现数据持久化存储,可以使用SharedPreferences


更多关于HarmonyOS 鸿蒙Next中ViewModel(1)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next中的ViewModel是用于管理UI相关数据的组件,与ArkUI框架深度集成。它独立于UI生命周期,在配置变更时保留数据。ViewModel通过@Observed装饰器和@ObjectLink实现数据绑定,支持状态管理。使用方式:继承BaseViewModel或实现IViewModel接口,通过ScopedContext获取实例。主要特性包括:数据持久化、状态共享、与UI组件解耦。ViewModel实例由ArkUI运行时管理,开发者无需手动创建或销毁。

更多关于HarmonyOS 鸿蒙Next中ViewModel(1)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,ViewModel的实现方式与Android有所不同,但核心概念是相似的。以下是关键点说明:

  1. 生命周期管理:
  • HarmonyOS的ViewModel同样独立于Ability(类似Activity)生命周期
  • 屏幕旋转等配置变化时Ability会重建,但ViewModel保持不变
  • 只有Ability完全退出时ViewModel才会销毁
  1. 实现方式:
  • 不需要额外添加依赖,ViewModel已是ArkUI框架的一部分
  • 创建ViewModel需继承ArkUI的ViewModel类:
class MainViewModel extends ViewModel {
  counter: number = 0
}
  1. 使用方式:
  • 通过ViewModelProvider获取实例:
let viewModel: MainViewModel = ViewModelProvider.get(this, 'MainViewModel')
  1. 数据绑定:
  • 建议在onCreate生命周期中初始化UI绑定
  • 通过@Observed装饰器实现数据响应式更新
  1. 持久化:
  • 要实现退出应用后数据保留,可以使用HarmonyOS的Preferences或数据库存储

注意:HarmonyOS Next的ViewModel实现更简洁,移除了AndroidX的依赖,但核心功能保持一致。

回到顶部