ViewModel в Kotlin: нерешенная ссылка

Я пытаюсь реализовать 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?

27
0
18 235
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

Включите следующее как зависимость:

implementation "android.arch.lifecycle:extensions:1.1.1"

Эта зависимость относится как к ViewModel, так и к LiveData, поэтому вам не потребуется указывать отдельные зависимости для них; т.е. первые две указанные вами зависимости могут быть заменены вышеупомянутой зависимостью расширений жизненного цикла.

Ага, вот в чем проблема!

RedBassett 20.04.2018 08:24

После добавления этой строки у меня все еще была та же проблема. Наконец, я обнаружил, что использую ViewModelProvider без «s» в конце. 30 минут, пытаясь понять это. Спасибо!

Jorge Casariego 26.06.2018 17:42

Эквивалентная зависимость AndroidX - "androidx.lifecycle:lifecycle-extensions:2.0.0".

Adil Hussain 12.04.2019 18:36

А как насчет activityViewModels?

IgorGanapolsky 17.01.2020 01:31

Ради любви ко всему Святому. ... s для победы.

Bill Mote 27.03.2020 02:53

В дополнение к тому, что предложил Как дела, вам придется исправить 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"

Я подумал, что это предложение покажет. Я проверил это, но сохранил это отдельно, поскольку это не решило нерешенную проблему со ссылками. Спасибо за ошибку и за опечатку (которая по какой-то причине синхронизировалась).

RedBassett 20.04.2018 08:27

Я столкнулся с такой проблемой в 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 часов назад?

iamkdblue 20.08.2020 22:47

Я сделал все предложения, и ничего не сработало, кроме как включить эту зависимость

Marco Ramirez Castro 01.10.2020 22:52
android {
    kotlinOptions {
        jvmTarget = '1.8'
    } 
}

уровень проекта и приложения

Я решаю это, делая вот так. реализовать эту зависимость

implementation "android.arch.lifecycle:extensions:1.1.1"

затем вызовите мой класс ViewModel

homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)

Другие вопросы по теме