我正在使用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
}
答案 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合成物的导入,因此您可能需要使缓存无效并重新启动。
如果仍然无法正常工作,则根据视图手动导入
答案 3 :(得分:0)
我遇到了类似的问题。
我有私人活动。我还导入了kotlinx库。但是我无法从该函数访问editText。
我刚刚删除了该函数,然后再次对其进行了定义。
Voila!奏效了。
答案 4 :(得分:0)
对于那些在 2021 年遇到此问题的人:
我知道这个问题是过去问过的,但由于它在这里仍然相关,我想帮助其他人: 今天我遇到了这个问题并尝试了建议的方法,不幸的是,
65
不再工作或更准确地被弃用,所以尝试使用 Jetpack 视图绑定方法,你会很好。
我在添加 Gradle Kotlin Android 扩展依赖后得到的消息是: 不推荐使用“kotlin-android-extensions”Gradle 插件。请使用此迁移指南 (click here) 开始使用视图绑定。 (click here) 和“kotlin-parcelize”插件。