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

时间:2017-10-23 05:21:57

标签: android kotlin android-studio-3.0 kotlin-extension

我正在使用Android Studio 3.0 RC2&科特林。

当我尝试访问UI组件时,应用程序崩溃,除非我首先编写findViewById。我以为Kotlin应该不必写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 个答案:

答案 0 :(得分:1)

在onCreateView中只返回膨胀的视图。

rpm -V

在onViewCreated中,您可以访问视图组件

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)

}

答案 1 :(得分:1)

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

apply plugin: 'kotlin-android-extensions'

答案 2 :(得分:1)

无法访问像op face这样的ui组件时,需要在应用gradle中添加以下内容:

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

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

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

    活动/片段视图:导入 kotlinx.android.synthetic.main。<您的活动视图>。*
  • 普通意见: 导入kotlinx.android.synthetic.main。 .view。*

答案 3 :(得分:0)

我遇到了类似的问题。

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

我刚刚删除了该函数,然后再次对其进行了定义。

Voila!奏效了。

答案 4 :(得分:0)

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

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

65

不再工作或更准确地被弃用,所以尝试使用 Jetpack 视图绑定方法,你会很好。

我在添加 Gradle Kotlin Android 扩展依赖后得到的消息是: 不推荐使用“kotlin-android-extensions”Gradle 插件。请使用此迁移指南 (click here) 开始使用视图绑定。 (click here) 和“kotlin-parcelize”插件。