无法使用 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' 插件。
我正在使用 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' 插件。