即使在上面的行中声明了 val,也期望成员声明
Expecting member declaration even though the val is declared the line above
我查看了有关此错误的所有其他问题,但其中 none 有帮助。我试图在我的布局文件中创建对按钮的引用,当我设置 onClickListener 时,我得到“期待成员声明”。这发生在第 35 行。旁注,我还在同一行收到错误“函数声明必须有一个名称”。这是代码:
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*
private var userLocation: Any = ""
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val spinner: Spinner = findViewById<Spinner>(R.id.locations)
spinner.adapter = ArrayAdapter(
this,
android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item,
resources.getStringArray(R.array.rooms)
)
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
adapterView: AdapterView<*>?,
view: View?,
position: Int,
p3: Long
) {
userLocation = adapterView?.getItemAtPosition(position)!!
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
}
val button: Button = findViewById<Button>(R.id.button)
button.setOnClickListener{
Toast.makeText(this, "Selected $userLocation", Toast.LENGTH_SHORT).show()
}
}
这些代码行:
val button: Button = findViewById<Button>(R.id.button)
button.setOnClickListener{
Toast.makeText(this, "Selected $userLocation", Toast.LENGTH_SHORT).show()
}
你已经在任何函数之外定义了。这意味着 button
是您定义的 class-level 属性。在调用任何函数之前初始化属性,因此此 findViewById
调用将在运行时失败,因为它将在 onCreate()
.
之前调用
而且你不能简单地在一个函数的顶层调用一个像 setOnClickListener
这样的函数。这就是为什么出现“期待成员声明”错误。
您需要将所有这些代码移动到您的 onCreate()
函数中。
我查看了有关此错误的所有其他问题,但其中 none 有帮助。我试图在我的布局文件中创建对按钮的引用,当我设置 onClickListener 时,我得到“期待成员声明”。这发生在第 35 行。旁注,我还在同一行收到错误“函数声明必须有一个名称”。这是代码:
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*
private var userLocation: Any = ""
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val spinner: Spinner = findViewById<Spinner>(R.id.locations)
spinner.adapter = ArrayAdapter(
this,
android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item,
resources.getStringArray(R.array.rooms)
)
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
adapterView: AdapterView<*>?,
view: View?,
position: Int,
p3: Long
) {
userLocation = adapterView?.getItemAtPosition(position)!!
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
}
val button: Button = findViewById<Button>(R.id.button)
button.setOnClickListener{
Toast.makeText(this, "Selected $userLocation", Toast.LENGTH_SHORT).show()
}
}
这些代码行:
val button: Button = findViewById<Button>(R.id.button)
button.setOnClickListener{
Toast.makeText(this, "Selected $userLocation", Toast.LENGTH_SHORT).show()
}
你已经在任何函数之外定义了。这意味着 button
是您定义的 class-level 属性。在调用任何函数之前初始化属性,因此此 findViewById
调用将在运行时失败,因为它将在 onCreate()
.
而且你不能简单地在一个函数的顶层调用一个像 setOnClickListener
这样的函数。这就是为什么出现“期待成员声明”错误。
您需要将所有这些代码移动到您的 onCreate()
函数中。