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"
.