为什么即使我在 xml 中有按钮 ID,它仍然显示 "Unresolved reference: button"?
Why does it still say "Unresolved reference: button" even when I have button id in xml?
我有一个简单的 android 应用程序,我想单击按钮传递其他 activity。但是它说
Unresolved reference: button
甚至我在 xml 中给出了 id。我不知道我错在哪里。
截图:
activity_main.xml:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="Click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
main_activity:
class MainActivity : AppCompatActivity() {
companion object {
const val USER = "user"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val user = User( "mayk", "qqqq", PersonalInfo("mayk", "james"))
button.setOnClickListener{
val intent = Intent (this, Activity2::class.java)
intent.putExtra(USER, user)
startActivity(intent)
}
}
}
val button = findViewById<View>(R.id.button)
why still say “Unresolved reference: button” even I have button id in xml?
您的 xml 布局文件中的 ID 不是 Kotlin 变量。您需要声明一个变量 val button
才能使用它。您还需要初始化变量以引用 Button
对象。一种方法是使用
val button = findViewById<View>(R.id.button)
我建议您阅读 https://d.android.com 上的初学者指南,以了解 Android 编程的基础知识。
无需使用 findViewById()
转到您的Build.Gradle(模块:应用程序)
添加以下行
apply plugin: 'kotlin-android-extensions'
或
id 'kotlin-android-extensions'
然后它会要求你同步
然后按同步
之后它会要求您仅使用 ALT+ENTER
导入
更新:此解决方案已弃用
现在您必须使用视图绑定
在模块级别 build.gradle 文件中将 viewBinding 构建选项设置为 true
android {
...
buildFeatures {
viewBinding true
}
}
要设置绑定 class 的实例以与 activity 一起使用,请在 activity 的 onCreate() 方法中执行以下步骤:
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
您现在可以使用绑定实例 class 来引用任何视图:
binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }
有关更多信息,您可以查看 https://developer.android.com/topic/libraries/view-binding
我有一个简单的 android 应用程序,我想单击按钮传递其他 activity。但是它说
Unresolved reference: button
甚至我在 xml 中给出了 id。我不知道我错在哪里。
截图:
activity_main.xml:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="Click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
main_activity:
class MainActivity : AppCompatActivity() {
companion object {
const val USER = "user"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val user = User( "mayk", "qqqq", PersonalInfo("mayk", "james"))
button.setOnClickListener{
val intent = Intent (this, Activity2::class.java)
intent.putExtra(USER, user)
startActivity(intent)
}
}
}
val button = findViewById<View>(R.id.button)
why still say “Unresolved reference: button” even I have button id in xml?
您的 xml 布局文件中的 ID 不是 Kotlin 变量。您需要声明一个变量 val button
才能使用它。您还需要初始化变量以引用 Button
对象。一种方法是使用
val button = findViewById<View>(R.id.button)
我建议您阅读 https://d.android.com 上的初学者指南,以了解 Android 编程的基础知识。
无需使用 findViewById()
转到您的Build.Gradle(模块:应用程序) 添加以下行
apply plugin: 'kotlin-android-extensions'
或
id 'kotlin-android-extensions'
然后它会要求你同步 然后按同步 之后它会要求您仅使用 ALT+ENTER
导入更新:此解决方案已弃用
现在您必须使用视图绑定
在模块级别 build.gradle 文件中将 viewBinding 构建选项设置为 true
android {
...
buildFeatures {
viewBinding true
}
}
要设置绑定 class 的实例以与 activity 一起使用,请在 activity 的 onCreate() 方法中执行以下步骤:
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
您现在可以使用绑定实例 class 来引用任何视图:
binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }
有关更多信息,您可以查看 https://developer.android.com/topic/libraries/view-binding