Я пытаюсь реализовать ViewModel в приложении 100% Kotlin. В каждой документации, которую я могу найти, говорится, что я хочу использовать это для получения экземпляра ViewModel:
ViewModelProviders.of(this).get(CustomViewModel::class.java)
Согласно документам, я должен иметь возможность импортировать это с помощью:
import android.arch.lifecycle.ViewModelProviders
Однако этот импорт не разрешен. В моем файле сборки я использую следующее:
def androidArchVersion = '1.1.1'
implementation "android.arch.lifecycle:viewmodel:$androidArchVersion"
implementation "android.arch.lifecycle:livedata:$androidArchVersion"
annotationProcessor "android.arch.lifecycler:compiler:$androidArchVersion"
testImplementation "android.arch.core:core-testing:$androidArchVersion"
Почему я не могу получить доступ к ViewModelProviders?
Включите следующее как зависимость:
implementation "android.arch.lifecycle:extensions:1.1.1"
Эта зависимость относится как к ViewModel, так и к LiveData, поэтому вам не потребуется указывать отдельные зависимости для них; т.е. первые две указанные вами зависимости могут быть заменены вышеупомянутой зависимостью расширений жизненного цикла.
После добавления этой строки у меня все еще была та же проблема. Наконец, я обнаружил, что использую ViewModelProvider без «s» в конце. 30 минут, пытаясь понять это. Спасибо!
Эквивалентная зависимость AndroidX - "androidx.lifecycle:lifecycle-extensions:2.0.0".
А как насчет activityViewModels?
Ради любви ко всему Святому. ... s для победы.
В дополнение к тому, что предложил Как дела, вам придется исправить lifecycler:compiler на lifecycle:compiler - синхронизация Gradle не должна даже успешно завершиться с этой опечаткой.
Во-вторых, стандартная обработка аннотаций Android («annotationProcessor») на самом деле не работает с Kotlin. Вместо этого используйте Kotlin's kapt.
Вверху файла build.gradle добавьте следующее:
apply plugin: 'kotlin-kapt'.
И в разделе зависимостей замените вхождения annotationProcessor (как указано выше) на kapt, например
kapt "android.arch.lifecycle:compiler:1.1.1"
Я подумал, что это предложение покажет. Я проверил это, но сохранил это отдельно, поскольку это не решило нерешенную проблему со ссылками. Спасибо за ошибку и за опечатку (которая по какой-то причине синхронизировалась).
Я столкнулся с такой проблемой в AndroidStudio 3.0.1 и решил, добавив следующие зависимости в соответствующем build.gradle:
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
код версии может отличаться, как сообщает AndroidStudio, если он отличается.
Эту проблему также можно решить, установив для minSdkVersion значение 21.
Если у вас minSdkVersion 21 или выше, вам не понадобится implementation "android.arch.lifecycle:extensions:1.1.1".
Если вышеуказанное «добавление / обновление зависимостей» не помогло решить вашу проблему, попробуйте запустить снова в вашей студии Android. Это просто root, я не вижу в этом серьезных проблем. Надеюсь, поможет.
В моем случае мне не хватало:
implementation "androidx.fragment:fragment-ktx:1.1.0"
Спасибо, у меня сработало, только вы ответили 5 часов назад?
Я сделал все предложения, и ничего не сработало, кроме как включить эту зависимость
android {
kotlinOptions {
jvmTarget = '1.8'
}
}
уровень проекта и приложения
Я решаю это, делая вот так. реализовать эту зависимость
implementation "android.arch.lifecycle:extensions:1.1.1"
затем вызовите мой класс ViewModel
homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
Ага, вот в чем проблема!