首页 > 解决方案 > 如何修复: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>

标签: javaandroidxmlkotlin

解决方案


java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView 不能转换为 android.widget.Button)

在您的布局中roll_buttonTextView在您的活动中,您正在尝试做findViewByIdButton这就是您得到的原因ClassCastException

第一个解决方案是

用这个

val rollButton: TextView = findViewById(R.id.roll_button)

而不是这个

val rollButton: Button = findViewById(R.id.roll_button)

第二种解决方案是

在布局文件中为您分配roll_buttonidbutton

<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


推荐阅读