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