【问题标题】:Android : Cannot cast from View to ButtonAndroid:无法从视图投射到按钮
【发布时间】:2010-05-10 19:55:30
【问题描述】:

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

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

我已经尝试了许多不同的方法来让它运行,并且我已经寻找答案,但由于某种原因它只是拒绝正常工作。如果有人能指出我正确的方向,那将不胜感激。

提前致谢。

【问题讨论】:

  • 可能,您在项目中创建了“Button”类?

标签: java android button view casting


【解决方案1】:

试试这个,

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      要在您的 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"
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          除了已经提到的所有其他内容,我还建议您查看文档顶部的导入语句。我发现这个特别烦人:

          import android.R;
          

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

          【讨论】:

            【解决方案6】:

            我实际上在我正在做的代码中遇到了这个问题。基本上它是“如果它看起来像一只鸭子,如果它听起来像一只鸭子,那么为什么该死的在这里插入脏话你不把它看作是一只鸭子?”情况。我通过将其更改为 android:id="@+id/someid_x" 的等效项来更改 android:id="@+id/someid" 的等效项(不要忘记在 Java 中也这样做)并且一切都像再次发条。

            所以,在我的情况下,我相信可能有一个 ID 引用了 R 表中的另一个对象,它得到了错误或意外的项目。最奇怪的是,当将一组视图放入RelativeLayout时,它就开始发生了

            【讨论】:

            • 同样的事情发生在我身上——在这种情况下,只需删除 R.java 并让 eclipse 重新创建它就足够了。
            • Android 可能很顽固。有时将 id 更改为某些东西,让它使用新 id 运行一段时间,然后再将其更改回原始 id 使其再次运行良好。只要确保 id 没有在同一个 xml 中的多个地方使用。实际上,您可以在 Android 中重用 id,因为它们主要用作 cookie 屑以能够操作视图(如果我在这方面错了,请纠正我)
            【解决方案7】:

            在调用小部件类型不匹配时发生此类转换异常,就像您拥有一个图像视图 image1,但您在 java 代码中使用 ImageButton ib=(ImageButto) findViewById(R.id.image1); 那个时候你会收到这样的错误信息

            【讨论】:

              【解决方案8】:

              检查你是否错过了这一行

              import android.view.View;

              【讨论】:

                【解决方案9】:

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

                import android.widget.Button;
                

                【讨论】:

                  【解决方案10】:

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

                  import androidx.appcompat.app.AppCompatActivity;
                  
                  import android.os.Bundle;
                  import android.widget.TextView;
                  import android.widget.Button;
                  

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-12-19
                      • 1970-01-01
                      相关资源
                      最近更新 更多