android-studio - 我可以注入活动的视图模型并在对话框片段中使用它吗
问题描述
我正在尝试注入活动的视图模型,我想在对话框片段中使用它,如何用 Kodein 注入它?并使用我之前在其他活动或片段中注入的视图模型。
我已经尝试过中等教程这里是教程
https://proandroiddev.com/android-viewmodel-dependency-injection-with-kodein-249f80f083c9
我正在尝试从活动的视图模型访问注入结果,但是当我尝试从对话框片段访问 viewModel 内的某些对象时,该值为 null 与活动的 viewModel 不同
// This is from Activity
private val viewModelFactory: TriplogisticViewModelFactory by instance()
private val viewModel: TriplogisticViewModel by lazy {
ViewModelProviders
.of(this@ContactDetailBottomSheetDialogFragment, viewModelFactory)
.get(TriplogisticViewModel::class.java)
}
Log.e("VIEWMODEL_ACTIVITY", viewModel.mode.get().toString) // result is SENDER_MODE
我期待当我访问对话框片段的 viewModel 中的某个对象时,我得到与活动的 viewModel 相同的值
// This is from Dialog Fragment
private val viewModelFactory: TriplogisticViewModelFactory by instance()
private val viewModel: TriplogisticViewModel by lazy {
ViewModelProviders
.of(this@ContactDetailBottomSheetDialogFragment, viewModelFactory)
.get(TriplogisticViewModel::class.java)
}
我想要与活动的 viewModel 对象相同的结果,但我得到了空结果
Log.e("VIEWMODEL_FRAGMENT", viewModel.mode.get().toString) // result is null
解决方案
您必须使用 shared ViewModel
。使用活动所有者来实例化ViewModel
. 好像:
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
}
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, Observer<Item> { item ->
// Update the UI
})
}
}
详情请点击这里
推荐阅读
- arrays - 将一个数组分成两个表格视图单元格
- github - github 页面无法将表中的 .md 转换为 .html
- python - 如何根据 Python 中每个字符串内的浮点数对列表进行排序?
- python - 检测鼠标悬停并在鼠标悬停时发出声音?
- encoding - 有效地存储一系列具有固定最小值和最大值的数字
- python - 字符变量的缺失值处理
- python - 如果满足某些条件,您如何搜索数据帧的每一行并将值从该数据帧复制到另一个数据帧?
- modelsim - modelsim 提示通配符建议/自动完成消失了
- vba - 如何评估包含列名的字符串?
- python - Cythonizing 一个 Django 项目