ViewModel в Котлине: неразрешенные ссылки

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

Ответы

Ответ 1

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

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

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

Ответ 2

В дополнение к тому, что предлагает Sup, вам придется исправить lifecycler:compiler to lifecycle:compiler - синхронизация Gradle не должна даже успешно завершаться с этой опечаткой.

Во-вторых, стандартная аннотация обработки андроидов ("annotationProcessor") на самом деле не работает с Kotlin. Вместо этого используйте Kotlin kapt.

В верхней части файла build.gradle добавьте следующее:

apply plugin: 'kotlin-kapt'.

В разделе "Зависимости" замените элементы annotationProcessor (как и выше) с помощью kapt, например

kapt "android.arch.lifecycle:compiler:1.1.1"

Ответ 3

Я столкнулся с такой проблемой в AndroidStudio 3.0.1 и решил, добавив следующие зависимости в правильную build.gradle:

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

код версии может отличаться, поскольку AndroidStudio сообщает, отличается ли он.

Ответ 4

Эту проблему также можно решить, настроив minSdkVersion на 21.

Если у вас minSdkVersion 21 или выше, вам не понадобится implementation "android.arch.lifecycle:extensions:1.1.1".