无法使用 Kotlin 访问 EditText 或其他 UI 组件

Can't access EditText or other UI components with Kotlin

我正在使用 Android Studio 3.0 RC2 和 Kotlin。

当我尝试访问 UI 组件时,应用程序崩溃,除非我先编写 findViewById。我以为 Kotlin 应该摆脱必须写 findViewById 行? UI 是一个 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
}

在 onCreateView 中 return 膨胀视图。

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")
    }

我遇到了类似的问题。

我有一个私人活动。我还导入了 kotlinx 库。但是我无法从该函数访问 editText。

我刚刚删除了函数并重新定义了它。

瞧!成功了。

我是因搜索同样的问题而来到这里的。我错过了将 kotlin-android-extensions 添加到 build.gradle:

apply plugin: 'kotlin-android-extensions'

无法访问 ui 组件,如下面的 OP 组件在应用程序中是必需的 gradle:

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

即使在添加此行后 android studio 仍然无法自动解析 kotlin 合成的导入,因此您可能需要使缓存无效并重新启动。

如果仍然无法正常工作,则根据视图手动导入

  • activity /片段视图:导入 kotlinx.android.synthetic.main..*
  • 正常观看次数: 导入 kotlinx.android.synthetic.main..view.*

对于在 2021 年遇到此问题的人:

我知道这个问题过去曾被问过,但由于它在这里仍然相关,我想帮助其他人: 今天我 运行 这个问题并尝试了建议的方法,不幸的是,

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

不再工作或更准确地说已弃用,因此尝试使用 Jetpack 视图绑定方法,你会很好。

添加 Gradle Kotlin Android 扩展依赖后我得到的消息是: 'kotlin-android-extensions' Gradle 插件已弃用。请使用此迁移指南 (click here) to start working with View Binding. (click here) 和 'kotlin-parcelize' 插件。