Не удается получить доступ к 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.