Наличие нескольких экземпляров ViewModel через фрагменты в ViewPager - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть такая структура:

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)
        }

    }
}
...