我之所以问,是因为我读到使用工厂是你应该如何将参数传递到 ViewModel 中,但这个实现似乎工作正常。
我的视图模型
class MyListViewModel(application : Application , currentItemName : String) : AndroidViewModel(application) {
val dataSource = Database.getInstance(application).DatabaseDao
val itemList = dataSource.getItems(currentItemName)
internal val _singleItem = MutableLiveData<Item>()
val singleItem : LiveData<Item>
get() = _singleItem
}
这是我如何在我的片段中启动它
val currentItemName = "some item name"
val binding = FragmentItemsListBinding.inflate(inflater)
val application = requireNotNull(this.activity).application
val viewModel = MyListViewModel(application, currentItemName)
binding.lifecycleOwner = this
binding.viewModel = viewModel
如果这样做没有缺点,我很高兴,但我有点担心会产生其他问题。
但此实现似乎工作正常
也许您没有测试配置更改,例如:
- 在纵向和横向之间旋转设备
- 打开或关闭暗模式
- 在"设置"中切换区域设置
- 等等
使用JetpackViewModel
系统背后的重点是处理配置更改。而且,为此,您需要使用ViewModelProvider
并让它管理ViewModel
的创建,无论是使用内置Factory
,您的自定义,还是由依赖反转框架(dagger/剑柄、Koin 等)提供的