У меня есть такая структура:
MainActivity
ListFragment
DetailFragment
ViewPager
DetailItemFragment
DetailItemFragment
DetailItemFragment
.
.
У меня есть DetailItemViewModel
, которое остается полем в DetailItemFragment
.Я хочу создать разные экземпляры модели представления для каждого DetailItemFragment
.Тем не менее, система дает мне тот же экземпляр.Я создаю его так:
detailItemViewModel = ViewModelProviders.of(this, factory).get(DetailItemViewModel::class.java)
this
является объектом DetailItemFragment
, поэтому область действия должна быть в этом фрагменте.Я ожидаю, что каждый DetailItemFragment
создает свой собственный экземпляр модели представления.Но factory
создает один экземпляр, когда он вводится в MainActivity
.Я не знаю основную причину, но я с подозрением отношусь к моей структуре кинжала, поэтому любой подход к этому будет оценен.
РЕДАКТИРОВАТЬ
Класс ViewModelFactory:
@PerActivity
class ViewModelFactory @Inject constructor(
private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = creators[modelClass] ?: creators.entries.firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
try {
@Suppress("UNCHECKED_CAST")
return creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}