Получение ошибки «Неразрешенной ссылки» для идентификатора EditText в основном действии

#android #kotlin

#Android #kotlin

Вопрос:

Я только что начал разработку Android с базовым приложением, которое принимает имя пользователя и отображается в Toast, но столкнулось с ошибкой в основном действии. В нем говорится «Неразрешенные ссылки: editName». Я попытался снова создать приложение, вручную импортировать виджет EditText и изменить имя идентификатора, но ничего не работает. Было бы здорово, если бы кто-нибудь мог сказать мне, что происходит не так. Скриншот кода с ошибкой, подчеркнутой красным .…. Сборка модуля …. Сборка проекта

Ответ №1:

Я покажу вам пример на Java.

Вы должны создать переменную в своем классе activity

 EditText editName;
 

затем вы должны переопределить метод onCreate() Activity класса:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    editName = (EditText) findViewById(R.id.editName);
}
 

переопределяя onCreate() , вы можете взять ссылку на свой EditText.

Ответ №2:

Если вы следуете руководству, они, вероятно, ожидают, что вы будете использовать синтетическую привязку Kotlin, что означает, что вам это нужно в вашем build.gradle :

 apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
 

Это автоматически создаст переменные для каждого View в макете, которому присвоен идентификатор, поэтому, если у вас есть идентификатор EditText с идентификатором editName , тогда a val editName: EditText будет создан в фоновом режиме при раздувании макета. Да, это волшебно, да, это сбивает всех с толку и объясняет множество проблем, с которыми люди сталкиваются здесь!

Ответ Саваторе — это обычный, стандартный, немагический способ сделать это. Если вам нужно удобство, загляните в View Binding библиотеку, которая является официальным способом автоматической привязки представлений к переменным (синтетика Kotlin устарела)

Комментарии:

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

2. добавьте import kotlinx.android.synthetic.main.activity_main.* в свой импорт в действие. Но сначала попробуйте навести текстовый курсор на красный editText , нажать Alt Enter и посмотреть, импортирует ли он его для вас (или предлагает) — вам очень редко приходится добавлять import строки самостоятельно