【发布时间】:2020-10-20 08:39:21
【问题描述】:
我首先尝试安卓ViewModel和HiltDI
据我从下面的链接了解,要在运行时使用值初始化 ViewModel,我应该使用 ViewModelFactory
//ViewModel
class ScoreViewModel(finalScore: Int) : ViewModel() {
// The final score
var score = finalScore
init {
Log.i("ScoreViewModel", "Final score is $finalScore")
}
}
//ViewModelFactory
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) {
return ScoreViewModel(finalScore) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
//Fragment
viewModelFactory = ScoreViewModelFactory(ScoreFragmentArgs.fromBundle(arguments!!).score)
要使用带有刀柄的 ViewModel,我应该使用@ViewModelInject,如下面的链接所述
//ViewModel
class ExampleViewModel @ViewModelInject constructor(
private val repository: ExampleRepository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
...
}
//Activity / Fragment
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
private val exampleViewModel: ExampleViewModel by viewModels()
...
}
但是如何将Hilt 与ViewModelFactory 一起使用?
似乎答案在@Assisted,但我不知道如何
如何告诉 hilt 我喜欢它向 ViewModel 注入存储库接口,同时仍然允许 ViewModelFactory 在运行时使用参数初始化 ViewModel?
【问题讨论】:
-
这篇文章可能会清楚地分享如何处理这个问题medium.com/mobile-app-development-publication/…
标签: android dagger-hilt