Android:无法从View转换为Button

时间:2010-05-10 19:55:30

标签: java android button view casting

我刚刚开始使用Android,但似乎遇到了一个我根本无法找到答案的问题。我在这一行收到错误“无法从视图转换为按钮”:

Button myButton = (Button)findViewById(R.id.my_button);

我尝试了许多不同的东西,我已经找到了答案,但由于某种原因,它只是拒绝正常工作。如果有人能指出我正确的方向,那将是最受欢迎的。

提前感谢。

11 个答案:

答案 0 :(得分:6)

试试这个,

android.widget.Button myButton = (android.widget.Button)findViewById(R.id.my_button); 

答案 1 :(得分:5)

异常是ClassCastException吗?如果是这样,那么您使用标识my_button查找的视图不是按钮。如果它是NullPointerException,那么没有id为my_button的视图。这可能是因为在您尝试查找视图之前未调用setContent()。

答案 2 :(得分:3)

我也遇到过这个错误,无法找到原因。就像Joe Plante指出的那样,如果它不起作用那么就会出现问题......

在我的场景中,我碰巧给了相对布局一个id(即点击图形布局中的空白区域)与我的按钮相同的ID。这导致FindViewById(R.id.my_button)返回错误的View;

要在xml中检查一下,看看是否有

<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/btnRecipe"

答案 3 :(得分:1)

我的猜测是你的XML视图(my_button)不是一个按钮。否则,您确定按钮的ID是否正确?它应该读作“android:id="@+id/my_button"”以及宽度和高度。请发布您的XML文件。

答案 4 :(得分:1)

除了已提及的所有内容之外,我还建议您查看文档顶部的import语句。我发现这个特别令人讨厌:

import android.R;

这样做意味着每次在程序的其余部分引用R.id.my_button时,它都会查看Android的默认资源,而不是您自己的资源。

答案 5 :(得分:1)

我实际上在我正在做的代码中遇到过这个问题。基本上它是“如果它看起来像一只鸭子,如果它听起来像一只鸭子,那么为什么血腥的插入咒骂你不是把它视为鸭子吗?”情况。我改为相当于android:id =“@ + id / someid”,将它改为android:id =“@ + id / someid_x”(不要忘记在Java中也这样做),一切都像再次发条。

所以,在我的情况下,我相信可能有一个ID引用了R表中的另一个对象,并且它得到了错误或非预期的项目。最奇怪的是,当将一组视图放入RelativeLayout

时,它就开始发生了

答案 6 :(得分:0)

这个类转换异常发生在调用窗口小部件类型不匹配时,就像你有一个Image View image1,但是你在java代码中调用它 ImageButton ib =(ImageButto)findViewById(R.id.image1); 那个时候你得到像这样的错误信息

答案 7 :(得分:0)

检查你是否错过了这一行

import android.view.View;

答案 8 :(得分:0)

我在Android Studio 3.5中遇到了这个问题,IDE并没有通过智能发现库。
我通过手动插入库解决了这个问题:

import android.widget.Button;

答案 9 :(得分:0)

在我的情况下,是导入android.widget.Button失败。一旦完成,错误就解决了。

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
import android.widget.Button;

答案 10 :(得分:0)

就我而言,我创建了一个名为“按钮”的活动。这与按钮小部件矛盾。当我用“ ButtonActivity”更改活动名称时,问题就消失了。