我想使用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中还有另一种方法

最佳答案

更新了答案:

事情发生了一点变化,因为以前需要依赖-ViewModelProviders-got deprecated(有关详细信息,请参见旧答案)。现在,您可以直接使用ViewModelProvider构造函数。

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

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

但是请注意,如果要在ViewModel中实例化Fragment,则可以添加androidx.fragment:fragment-ktx:$Version依赖项,然后利用属性委托(delegate):
private val viewModel: SheduleViewModel by viewModels()

内部将使用ViewModelProvider并将您的ViewModel限制为Fragment。这只是编写相同内容的一种更简洁的方式。
ViewModelProvider构造函数和by viewModels()都接受一个工厂作为参数(可用于注入(inject)ViewModel):
private val viewModel =
    ViewModelProvider(this, viewModelFactory).get(SheduleViewModel::class.java)


private val viewModel: SheduleViewModel by viewModels { viewModelFactory }

使用最适合您的一种。

旧答案:

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

08-05 06:03