HarmonyOS 鸿蒙Next中ViewModel(1)
HarmonyOS 鸿蒙Next中ViewModel(1)
ViewModel
ViewModel的生命周期和Activity不同,专门用来存放和页面相关的数据,手机屏幕旋转时,Activity会重新创建,而ViewModel不会,只有Activity退出时,ViewModel才会销毁
binding的初始化应该在onCreate中进行,否则layoutInflater可能还没有被初始化
简单用法:
- 添加依赖
implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
- 给每一个Activity或者Fragment都创建对应的ViewModel并继承于ViewModel,添加需要的存储的数据变量
class MainViewModel : ViewModel() {
var counter=0
}
- 在活动中通过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
鸿蒙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有所不同,但核心概念是相似的。以下是关键点说明:
- 生命周期管理:
- HarmonyOS的ViewModel同样独立于Ability(类似Activity)生命周期
- 屏幕旋转等配置变化时Ability会重建,但ViewModel保持不变
- 只有Ability完全退出时ViewModel才会销毁
- 实现方式:
- 不需要额外添加依赖,ViewModel已是ArkUI框架的一部分
- 创建ViewModel需继承ArkUI的ViewModel类:
class MainViewModel extends ViewModel {
counter: number = 0
}
- 使用方式:
- 通过ViewModelProvider获取实例:
let viewModel: MainViewModel = ViewModelProvider.get(this, 'MainViewModel')
- 数据绑定:
- 建议在onCreate生命周期中初始化UI绑定
- 通过@Observed装饰器实现数据响应式更新
- 持久化:
- 要实现退出应用后数据保留,可以使用HarmonyOS的Preferences或数据库存储
注意:HarmonyOS Next的ViewModel实现更简洁,移除了AndroidX的依赖,但核心功能保持一致。