Android.widget,textView 不能转换为 android.widget,button

Posted

技术标签:

【中文标题】Android.widget,textView 不能转换为 android.widget,button【英文标题】:Android.widget,textView cannot be cast to android.widget,button 【发布时间】:2012-09-10 00:58:38 【问题描述】:

我在启动我的活动时不断收到运行时错误,它说 android.widget.textview 无法转换为 android.widget.button?

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_
    android:layout_
    android:orientation="vertical"
    tools:ignore="HardcodedText" >

    <TextView
        android:id="@+id/textViewName"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="false"
        android:layout_alignParentTop="false"
        android:text="Name:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewLevel"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textViewName"
        android:text="Level:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewClass"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="false"
        android:layout_below="@+id/textViewLevel"
        android:text="Class:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewTitle"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/textViewClass"
        android:layout_alignBottom="@+id/textViewClass"
        android:layout_centerHorizontal="true"
        android:text="Title:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewXP"
        android:layout_
        android:layout_
        android:layout_above="@+id/textViewTitle"
        android:layout_alignLeft="@+id/textViewTitle"
        android:text="XP:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewGold"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/textViewXP"
        android:layout_alignParentTop="true"
        android:text="Gold:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewLineBreak"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textViewClass"
        android:text="________________________________________"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:visibility="invisible" />

    <TextView
        android:id="@+id/textViewGoldValue"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/textViewGold"
        android:text="0"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/button3"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/textViewTitle"
        android:text="Stats" />

    <Button
        android:id="@+id/button2"
        android:layout_
        android:layout_
        android:layout_above="@+id/button3"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="20dp"
        android:layout_toLeftOf="@+id/textViewTitle"
        android:text="Equipment" />

    <Button
        android:id="@+id/button1"
        android:layout_
        android:layout_
        android:layout_above="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/button2"
        android:layout_marginBottom="22dp"
        android:text="Inventory" />

    <Button
        android:id="@+id/Button01"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignLeft="@+id/button4"
        android:layout_alignParentRight="true"
        android:text="Shop" />

    <Button
        android:id="@+id/button5"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button2"
        android:layout_toRightOf="@+id/textViewXP"
        android:text="Class Training" />

    <Button
        android:id="@+id/button4"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/button5"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button1"
        android:text="Crafting" />

    <TextView
        android:id="@+id/textView4"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textViewLineBreak"
        android:text="HP:"
        android:textAppearance="?android:attr/textAppearanceMedium" />


    <TextView
        android:id="@+id/textViewStrTitle"
        android:layout_
        android:layout_
        android:layout_above="@+id/textViewLineBreak"
        android:layout_alignLeft="@+id/textViewGoldValue"
        android:text="N/A"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textViewXPValue"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/textViewGoldValue"
        android:layout_below="@+id/textViewGoldValue"
        android:text="0"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewLevelValue"
        android:layout_
        android:layout_
        android:layout_above="@+id/textViewClass"
        android:layout_toRightOf="@+id/textViewName"
        android:text="1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/TextViewStrClass"
        android:layout_
        android:layout_
        android:layout_above="@+id/textViewLineBreak"
        android:layout_alignLeft="@+id/textViewLevelValue"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textViewRace"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textViewClass"
        android:text="Race:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView1"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/textView4"
        android:layout_alignBottom="@+id/textView4"
        android:layout_toLeftOf="@+id/TextViewStrClass"
        android:text="10"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Spinner
        android:id="@+id/spinnerMonsters"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView4"
        android:layout_marginTop="50dp"
        android:layout_toLeftOf="@+id/btnBattle"
        android:entries="@array/Monsters"
        android:prompt="@string/MonsterPrompt" />

    <TextView
        android:id="@+id/textView2"
        android:layout_
        android:layout_
        android:layout_above="@+id/spinnerMonsters"
        android:layout_alignRight="@+id/textViewXPValue"
        android:text="10"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/btnBattle"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/spinnerMonsters"
        android:text="Battle!" />

    <TextView
        android:id="@+id/textView3"
        android:layout_
        android:layout_
        android:layout_above="@+id/textViewStrTitle"
        android:layout_alignRight="@+id/spinnerMonsters"
        android:layout_marginRight="14dp"
        android:text="/"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewXpNextLevel"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/textViewLevel"
        android:layout_alignBottom="@+id/textViewLevel"
        android:layout_alignLeft="@+id/btnBattle"
        android:text="100"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewBattleResults"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/spinnerMonsters"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textViewStrRace"
        android:layout_
        android:layout_
        android:layout_above="@+id/textView1"
        android:layout_toRightOf="@+id/textViewClass"
        android:text="l"
        android:textAppearance="?android:attr/textAppearanceSmall" />


    <TextView
        android:id="@+id/textViewStrAlliance"
        android:layout_
        android:layout_
        android:layout_above="@+id/textView2"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/textViewStrTitle"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textViewAlliance"
        android:layout_
        android:layout_
        android:layout_below="@+id/textViewTitle"
        android:layout_toRightOf="@+id/button1"
        android:text="Alliance:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView6"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/textViewAlliance"
        android:layout_below="@+id/textViewLineBreak"
        android:text="MP:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

这里发生了什么?翻了好几遍都没找到

编辑:

09-17 18:28:51.485: E/AndroidRuntime(724): FATAL EXCEPTION: main
09-17 18:28:51.485: E/AndroidRuntime(724): java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.intent_buttontests/com.example.intent_buttontests.PlayScreen: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.os.Looper.loop(Looper.java:137)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread.main(ActivityThread.java:4424)
09-17 18:28:51.485: E/AndroidRuntime(724):  at java.lang.reflect.Method.invokeNative(Native Method)
09-17 18:28:51.485: E/AndroidRuntime(724):  at java.lang.reflect.Method.invoke(Method.java:511)
09-17 18:28:51.485: E/AndroidRuntime(724):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-17 18:28:51.485: E/AndroidRuntime(724):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-17 18:28:51.485: E/AndroidRuntime(724):  at dalvik.system.NativeStart.main(Native Method)
09-17 18:28:51.485: E/AndroidRuntime(724): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
09-17 18:28:51.485: E/AndroidRuntime(724):  at com.example.intent_buttontests.PlayScreen.onCreate(PlayScreen.java:110)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.Activity.performCreate(Activity.java:4465)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-17 18:28:51.485: E/AndroidRuntime(724):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
09-17 18:28:51.485: E/AndroidRuntime(724):  ... 11 more

【问题讨论】:

你可能在某处做(Button) findViewById(R.id.actuallyATextView) 需要查看创建视图的 Activity 代码,但怀疑您正在尝试将 TextView 转换为 Button,例如: TextView textViewName = (Button) findViewById(R.id.textViewName);会导致这样的错误。 您发布的代码看起来不错...请发布 LogCat 错误。也许错误在不同的文件中? 我添加了 logcat。但我不知道发生了什么 您好,这个错误很简单,但无法理解 【参考方案1】:

我添加了 logcat。但我不知道发生了什么

这是您的 LogCat 文件中的重要信息:

Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
  at com.example.intent_buttontests.PlayScreen.onCreate(PlayScreen.java:110)

您正确阅读了错误,它是ClassCastExceptionCaused by... 下面的行告诉你错误是在哪里引发的,在第 110 行的 PlayScreen.onCreate() 中。尽我所能告诉第 110 行是:

Button btnBattle = (Button) findViewById(R.id.btnBattle);

但这行很好,btnBattle 的 XML 看起来也很好......

我自己使用您的布局运行了您的 Activity,没有出现任何错误。你清理过你的项目吗?这通常会消除这些“幻影”错误。 (在 Eclipse 中,Project -> Clean...


我确实有一个建议,你有很多按钮可以完成类似的任务。如果您使用 XML onClick 属性,您可以用更少的代码执行相同的操作。首先在您的 Activity 中创建一个方法(称为 launchClick()),如下所示:

public void launchClick(View v) 
    Intent intent;

    switch(v.getId()) 
    case R.id.button1:
        intent = new Intent(PlayScreen.this, Inventory.class);
        break;

    case R.id.button2:
        intent = new Intent(PlayScreen.this, Equipment.class);
        break;

    // etc, etc
    
    startActivityForResult(intent, 0);
;

并将android:onClick 属性添加到您应该在play_screen.xml 中具有此行为的每个按钮:

<Button
    android:id="@+id/button3"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/textViewTitle"
    android:onClick="launchClick"
    android:text="Stats" />

希望有帮助!

【讨论】:

我很高兴清洁工作,但请注意我更新了我的答案。 (我删除了implements OnClickListener,因为这没有必要。) 总是忘记清理项目:/!!!我搜索了,你让我免于提问!!!谢谢。 (已投票) Clean 帮我做了!谢谢 谢谢!清洁成功了!我永远不会猜到它!我们可以说它是 adt 中的错误吗? 清理项目,尤其是在修改“res”文件夹中的内容之后,似乎比我预期的更有价值。【参考方案2】:

Project -> Clean 可以帮助您。

【讨论】:

【参考方案3】:

您正在尝试将TextView 转换为Button

对于TextView 这样做:

TextView tv = (TextView)findviewById(R.id.your textviewid present in xml layout file);

对于Button

Button btn1 = (Button)findviewById(R.id.your buttonid present in xml layout file);

【讨论】:

或者这样做:-android.widget.Button myButton = (android.widget.Button)findViewById(R.id.my_button); 这也成功了!顺便提一下,如果你遇到环境错误,建议你重新启动IDE,然后再尝试清理【参考方案4】:

在 Eclipse 中,转到 Project > Clean,选择您的项目,然后就可以了...您的应用程序将正常运行...

【讨论】:

【参考方案5】:

我正在使用具有 3 个文本视图和 2 个按钮的 RelativeLayout。当我使用图形界面编辑器移动 textViews 的位置时,我得到了同样的奇怪错误。如果我将它们设置回原来放置的位置,错误就会消失。

我可以通过以下方式消除错误:

    将有问题的 XML 文件中的所有数据剪切到剪贴板。 保存项目。 清理项目(查看 XML 文件中的错误) 粘贴回 XML 代码并保存 干净 运行

这似乎是一个错误,因为 XML 代码是合法的,但没有在运行时正确构建。

希望它对你有用。 面向 Web 开发人员的 Eclipse Java EE IDE。

版本:Indigo Service Release 2 内部版本号:20120216-1857

【讨论】:

【参考方案6】:

首先确保所有TextView 在您的.java 文件中寻址正确的TextView.. 像这样..

TextView textview1 = (TextView) findViewById(R.id.textview1);

Android.widget 之类的错误,textView 无法转换为 android.widget,按钮出现,因为有时我们引用了 Button 而不是 TextView

如果一切正常,那么清理你的项目并刷新..它对我有用..

【讨论】:

【参考方案7】:

请附上您的 java 代码以找出问题所在。当您尝试将 textview 转换为按钮时会出现此问题。

【讨论】:

【参考方案8】:
    项目 > 清理

或者

    更改项目 ID

帮助:D

【讨论】:

【参考方案9】:

我刚刚遇到了同样的问题。但是,我决定只使用“视图”而不进行投射。它完美地工作。 "setOnClickListener" 对我们的情况同样有效。

例如 View button = v.findViewById(button_id); button.setOnClickListener(...)

【讨论】:

【参考方案10】:

如果项目清理不起作用。原因可能与在多个项目上使用相同的 ID有关。

确保在通过布局或以编程方式分配 ID 时,不重复。

我在将低数字分配为 ID 时遇到了这个问题(可能不是最佳做法),因为 ID 与 RadioButton 检查的 ID 冲突。

干杯

【讨论】:

【参考方案11】:

我也遇到过类似的问题,我的是 ImageView 而不是 TextView,当我回去检查我的活动时,我发现我已经将一个变量声明为 Button,然后我将变量分配给 findViewById(R 。

【讨论】:

以上是关于Android.widget,textView 不能转换为 android.widget,button的主要内容,如果未能解决你的问题,请参考以下文章

Android.widget textView 到 android.widget.button

android.widget.TextView.setTextAlignment():java.lang.NoSuchMethodError

Android 错误:android.widget.TextView.<init>

带有子项的 Android ListView 导致无法将 TwoLineListItem 强制转换为 android.widget.TextView

Android Widget 中的可滚动 TextView

异步任务尝试调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'[重复]