Savedstateviewmodelfactory окончательный, не может наследовать - PullRequest
0 голосов
/ 11 июля 2020
class SettingsViewModelFactory(application: Application, owner: SavedStateRegistryOwner) : SavedStateViewModelFactory(application, owner){


    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(SettingsViewModel::class.java)){
            return SettingsViewModel() as T
        }
        throw IllegalArgumentException("Invalid ViewModel class")
    }

}

Я подчеркиваю красное подчеркивание под SavedStateViewModelFactory, говоря, что тип является окончательным и не может быть унаследован от. Что мне делать? Документация слишком расплывчата. Также какое состояние я должен указать в возврате?

1 Ответ

3 голосов
/ 11 июля 2020

Если вы хотите создать свою собственную фабрику, которая позволяет использовать параметры конструктора SavedStateHandle, вы должны расширить AbstractSavedStateViewModelFactory, а не SavedStateViewModelFactory, как указано в явном примечании к документации. :

Предоставляя настраиваемый экземпляр ViewModelProvider.Factory, вы можете включить использование SavedStateHandle, расширив AbstractSavedStateViewModelFactory.

Однако вы не Для поддержки ViewModel с конструктором с нулевым аргументом требуется какая-либо настраиваемая фабрика - это поддерживается по умолчанию. Пользовательская фабрика понадобится только в том случае, если вам нужно передать пользовательские параметры в вашу ViewModel. В случае вашего кода вы можете полностью удалить свою настраиваемую фабрику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...