как исправить с помощью: java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView не может быть приведен к android.widget.Button - PullRequest
0 голосов
/ 06 июня 2019

Следующая ошибка возникает, когда я пытаюсь выполнить код, и приложение также завершает работу.(Вызывается: 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()
        }
    }

}

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

Ответы [ 4 ]

2 голосов
/ 06 июня 2019

вы пытаетесь установить идентификатор TextView для кнопки. измените код компоновки на этот

<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:id="@+id/roll_button"
android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/roll"
    />

1 голос
/ 06 июня 2019

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 id для вашегоbutton в вашем файле макета

<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 в котлине

0 голосов
/ 06 июня 2019

Установить идентификатор для кнопки вместо TextView

<Button android:id="@+id/roll_button"
0 голосов
/ 06 июня 2019

у вас проблема на линии

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

Вы пытаетесь преобразовать текстовое представление как кнопку, поэтому вы должны использовать, как показано ниже

val rollButton: TextView = findViewById(R.id.roll_button)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...