Не удается получить доступ к EditText или другим компонентам пользовательского интерфейса с Kotlin

Я использую Android Studio 3.0 RC2 и Kotlin.

Когда я пытаюсь получить доступ к компоненту пользовательского интерфейса, приложение падает, если я сначала не напишу findViewById. Я думал, что Котлин должен был избавиться от необходимости писать findViewById линия? Пользовательский интерфейс fragment и я пытаюсь получить доступ с того же fragment код. Есть ли способ не писать findViewById?

Эти строки работают:

var userNameField = view?.findViewById<EditText>(R.id.userNameTextField) as EditText
userNameField.setText("hello world")

Эта строка не работает без строки findViewById

userNameTextField.setText("hello world")

У меня даже есть

import kotlinx.android.synthetic.main.fragment_sign_in.*

onCreateView() код:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    var view = inflater!!.inflate(R.layout.fragment_sign_in, container, false)

    var userNameField = view?.findViewById<EditText>(R.id.userNameTextField) as EditText
    userNameField.setText("hello world")

    return view
}

5 ответов

Решение

В onCreateView просто верните завышенное представление.

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
return inflater!!.inflate(R.layout.fragment_sign_in, container, false)

}

В onViewCreated вы можете получить доступ к вашим компонентам представления

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        userNameField.setText("hello world")
    }

Я попал сюда в поисках той же проблемы. Я пропустил добавление kotlin-android-extensions в build.gradle:

apply plugin: 'kotlin-android-extensions'

Не удалось получить доступ к компонентам пользовательского интерфейса, например, OP выглядит так, как показано ниже, внутри приложения gradle:

plugins {
    ...
    id 'kotlin-android-extensions'
}

Несмотря на то, что после добавления этой строки студия Android все еще не смогла автоматически разрешить импорт для синтетики kotlin, поэтому вам может потребоваться аннулировать кеш и перезапустить.

Если все еще не работает, импортируйте вручную в зависимости от просмотров

  • вид активности / фрагмента: import kotlinx.android.synthetic.main.. *
  • обычные представления: import kotlinx.android.synthetic.main..view. *

Я столкнулся с подобной проблемой.

У меня была частная функция. Я также импортировал библиотеку kotlinx. Но я не смог получить доступ к editText из этой функции.

Я просто удалил функцию и определил ее снова.

Вуаля! Это сработало.

Для тех, у кого есть эта проблема в 2021 году:

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

plugins { ... id 'kotlin-android-extensions' }

больше не работает или, точнее, устарел, поэтому попробуйте использовать подход привязки представления Jetpack, и все будет хорошо.

Сообщение, которое я получил после добавления зависимости расширения Gradle Kotlin Android: плагин Gradle «kotlin-android-extensions» устарел. Воспользуйтесь этим руководством по миграции (нажмите здесь ), чтобы начать работу с View Binding. (нажмите здесь ) и плагин kotlin-parcelize.

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