我已经在我的项目中使用viewModel。但是我知道我可以通过很多方式初始化 View 模型。您知道这些方式之间的区别是什么吗?

  • viewModel = ViewModelProvider(this).get(ViewModelClass::class.java)
  • viewModel = ViewModelClass()
  • viewModel:ViewModelClass:通过viewModels()
  • viewModel:ViewModelse提供的ViewModelClass {
    ViewModelFactory(this,Reposityory(),意图

  • 技术上有什么区别?

    最佳答案

    通过使用

  • viewModel = ViewModelProvider(this).get(ViewModelClass::class.java)您正在创建范围为此Fragment/activity的ViewModelClass实例,并且每当重新创建 Activity 时,就会分配该viewmodel的相同实例,而不是新实例
  • viewModel = ViewModelClass()虽然看起来是正确的,但事实并非如此。每当重新创建 Activity 时,都会分配viewtmodel的实例。 不要尝试直接通过调用来构造ViewModel的构造函数,而是让ViewModelProvider来完成。
  • viewModel: ViewModelClass by viewModels()Android KTX提供这里delegate是ViewModel的创建。它类似于
  •   val viewModel by lazy{
         ViewModelProvider(this).get(MyViewModel::class.java)
      }
    
  • viewModel : ViewModelClass by ViewModels{ ViewModelFactory(this,Reposityory(),intent)}
  • 类似
    val viewModel by lazy {
        ViewModelProvider(this, ViewModelFactory(this,Reposityory(),intent)).get(MyViewModel::class.java)
    }
    
    

    关于android - 创建 View 模型的方式有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65649963/

    10-10 19:57