我想使用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
-得到了弃用(详见旧的答案)。现在,您可以ViewModelProvider
直接使用构造函数。
因此,在这种情况下,答案将是:
private val viewModel = ViewModelProvider(this).get(SheduleViewModel::class.java)
需要注意的是,但是,如果你实例化一个ViewModel
在Fragment
,你可以添加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] 删除。
我来说两句