gpt4 book ai didi

android - 如何在 AndroidX 中实例化 ViewModel?

转载 作者:行者123 更新时间:2023-12-02 11:42:12 24 4
gpt4 key购买 nike

我想使用 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)

}
}

of 没有解决,也许在androidx中还有另一种方法可以做到

最佳答案

更新答案:
事情发生了一些变化,因为之前需要的依赖项 - ViewModelProviders - got deprecated (有关详细信息,请参阅旧答案)。您现在可以使用 ViewModelProvider直接构造函数。
因此,在这种情况下,答案将是:

private val viewModel = ViewModelProvider(this).get(SheduleViewModel::class.java)
但是请注意,如果您包含 androidx.activity:activity-ktx:$Version依赖项(一些常用的 AndroidX 依赖项已经为您包含了它),您可以使用属性委托(delegate):
private val viewModel: SheduleViewModel by viewModels()
内部将使用 ViewModelProvider并确定您的 ViewModel给您的 Activity .这只是写同一件事的更简洁的方式。您可以对 Fragment 执行相同的操作通过包含 androidx.fragment:fragment-ktx:$Version依赖项(同样,通常已经包含在其他 AndroidX 依赖项中)。 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 的依赖项.

关于android - 如何在 AndroidX 中实例化 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com