【发布时间】:2020-09-06 08:00:41
【问题描述】:
现在我使用 viewModelFactory 在片段中初始化 viewModel 的参数。
class MyFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val binding = FragmentMyBinding.inflate(inflater)
binding.lifecycleOwner = this
val argument = MyFragmentArgs.fromBundle(requireArgument()).myArgument
val viewModelFactory = MyViewModelFactory(myArgument, application)
binding.viewModel = ViewModelProvider(
this, viewModelFactory).get(MyViewModel::class.java)
return binding.root
}
}
class MyViewModelFactory(
private val myArgument: MyArgument,
private val application: Application) : ViewModelProvider.Factory {
@Suppress("unchecked_cast")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(myArgument, application) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
相比hilt依赖注入方式,有没有办法直接将参数传递给viewModel?
【问题讨论】:
-
是您的依赖项运行时或构建时。如果是这样(构建时间),请参阅@AliSh 答案。否则,您现在必须创建一个 viewModel 工厂。那是因为 Hilt 还不支持
@AssistedInject。
标签: android dagger-hilt