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

use*_*205 5 android kotlin kotlin-extension android-studio-3.0

我正在使用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")
Run Code Online (Sandbox Code Playgroud)

没有findViewById行,此行不起作用

userNameTextField.setText("hello world")
Run Code Online (Sandbox Code Playgroud)

我甚至有

import kotlinx.android.synthetic.main.fragment_sign_in.*
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*ros 3

在 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)

}
Run Code Online (Sandbox Code Playgroud)

在 onViewCreated 中你可以访问你的视图组件

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        userNameField.setText("hello world")
    }
Run Code Online (Sandbox Code Playgroud)