如何在AndroidX中实例化ViewModel?

保尔捷·图森库洛夫

我想使用androidx库在Activity中初始化ViewModel

我已经尝试了文档说明的内容,但无法正常工作。“ .of”未解析。

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.example.myapplication.databinding.ActivityMainBinding`

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(
            this, R.layout.activity_main)
        binding.setLifecycleOwner(this)

        var model = ViewModelProvider.of(this).get(SheduleViewModel::class.java)

    }
}

尚未解决,也许在androidx中还有另一种方法

里卡多·科斯特拉(Ricardo Costeira)

更新的答案:

事情改变了一点点,因为以前需要依赖- ViewModelProviders-得到了弃用(详见旧的答案)。现在,您可以ViewModelProvider直接使用构造函数。

因此,在这种情况下,答案将是:

private val viewModel = ViewModelProvider(this).get(SheduleViewModel::class.java)

需要注意的是,但是,如果你实例化一个ViewModelFragment,你可以添加androidx.fragment:fragment-ktx:$Version依赖关系,然后利用财产代表团:

private val viewModel: SheduleViewModel by viewModels()

它在内部将使用ViewModelProvider和范围的ViewModel给你Fragment这只是编写相同内容的一种更简洁的方式。

无论是ViewModelProvider构造和by viewModels()也接受工厂作为参数(注入您有用ViewModel):

private val viewModel = 
    ViewModelProvider(this, viewModelFactory).get(SheduleViewModel::class.java)

private val viewModel: SheduleViewModel by viewModels { viewModelFactory }

使用最适合您的一种。

旧答案:

添加androidx.lifecycle:lifecycle-extensions:$lifecycleExtensionsVersion依赖项以便导入ViewModelProviders

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章