作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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)
}
}
最佳答案
更新答案:
事情发生了一些变化,因为之前需要的依赖项 - 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/
我是一名优秀的程序员,十分优秀!