java - 如何修复:java.lang.ClassCastException:androidx.appcompat.widget.AppCompatTextView 无法转换为 android.widget.Button
问题描述
当我尝试执行代码并且应用程序也终止时,会发生以下错误。(引起:java.lang.ClassCastException:androidx.appcompat.widget.AppCompatTextView 无法转换为android.widget.Button)
package com.tisu.role
import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
@SuppressLint("WrongViewCast")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.roll_button)
rollButton.setOnClickListener {
Toast.makeText(this, "button clicked", Toast.LENGTH_LONG).show()
}
}
}
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/roll_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/_01"
android:textSize="40sp"
android:layout_gravity="center_horizontal"
/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/roll"
/>
</LinearLayout>
解决方案
java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView 不能转换为 android.widget.Button)
在您的布局中roll_button
,TextView
在您的活动中,您正在尝试做findViewById
,Button
这就是您得到的原因ClassCastException
第一个解决方案是
用这个
val rollButton: TextView = findViewById(R.id.roll_button)
而不是这个
val rollButton: Button = findViewById(R.id.roll_button)
第二种解决方案是
在布局文件中为您分配roll_button
idbutton
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/_01"
android:textSize="40sp"
android:layout_gravity="center_horizontal"
/>
<Button android:layout_width="wrap_content"
android:id="@+id/roll_button"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/roll"
/>
</LinearLayout>
奖金
也读这个
不需要findViewById
在 kotlin
推荐阅读
- postgresql - 我正在尝试在 Windows 10 的 Ubuntu 子系统上安装 PostgreSQL 并不断获得此 -bash 权限被拒绝
- java - 如何使用 Java 创建我的类以在 MongoDB 中持久保存文档
- c++ - if constexpr 带有递归参数包
- python - 如何模拟 Python 类以仅更改一个参数
- java - Java 程序似乎没有在 while 循环内运行代码
- c - 编译时有什么方法可以链接 Makefile 中存在的目标文件?
- json - 使用 TypeScript 遍历 JSON 中的列表
- ios - watchOS 和 iOS 之间的版本兼容性
- javascript - Edit svgs instead of recreating
- java - 启动 websphere 服务器时出现问题?