Android.widget,textView无法强制转换为android.widget,按钮

时间:2012-09-17 19:01:49

标签: android android-layout android-intent android-widget

我在启动活动时遇到运行时错误,并说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_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:ignore="HardcodedText" >

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

    <TextView
        android:id="@+id/textViewLevel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="false"
        android:layout_below="@+id/textViewLevel"
        android:text="Class:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textViewXP"
        android:layout_alignParentTop="true"
        android:text="Gold:"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textViewLineBreak"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/textViewGold"
        android:text="0"
        android:textAppearance="?android:attr/textAppearanceMedium" />

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

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button5"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button1"
        android:text="Crafting" />

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


    <TextView
        android:id="@+id/textViewStrTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textViewLineBreak"
        android:layout_alignLeft="@+id/textViewLevelValue"
        android:textAppearance="?android:attr/textAppearanceSmall" />

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/spinnerMonsters"
        android:text="Battle!" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/spinnerMonsters"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textViewStrRace"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="fill_parent"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="wrap_content"
        android:layout_height="wrap_content"
        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 ComponentInfo{com.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

11 个答案:

答案 0 :(得分:87)

  

我添加了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中,项目 - &gt; 清理......


我有一个建议,你有很多按钮执行类似的任务。如果使用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_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/textViewTitle"
    android:onClick="launchClick"
    android:text="Stats" />

希望有所帮助!

答案 1 :(得分:27)

项目 - &gt;干净可以帮助你。

答案 2 :(得分: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);

答案 3 :(得分:1)

在Eclipse中转到Project&gt;清洁,选择你的项目,这就是......你的应用程序将正常运行......

答案 4 :(得分:1)

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

我可以通过以下方式摆脱错误:

  1. 将有问题的XML文件中的所有数据剪切到剪贴板。
  2. 保存项目。
  3. 清理项目(请参阅XML文件中的错误)
  4. 粘贴XML代码并保存
  5. 清洁
  6. 运行
  7. 这似乎是一个错误,因为XML代码是合法的,但不能在运行时正确构建。

    希望它适合你。 面向Web开发人员的Eclipse Java EE IDE。

    版本:Indigo Service Release 2 构建ID:20120216-1857

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

像Android.widget一样错误,textView无法强制转换为android.widget,因为有些时候我们引用了Button而不是TextView

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

答案 7 :(得分:0)

  1. 项目&gt;清洁
    1. 更改迭代ID
    2. 它有用:D

答案 8 :(得分:0)

我刚遇到同样的问题。但是,我决定只使用&#34; View&#34;没有铸造。它完美地运作。 &#34; setOnClickListener&#34;我们的情况也是如此。

e.g。 View button = v.findViewById(button_id); button.setOnClickListener(...)

答案 9 :(得分:0)

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

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

我在将数字作为ID(可能不是最佳做法)时,面临这个问题,因为ID与RadioButton检查ID相冲突。

干杯

答案 10 :(得分:0)

我遇到过类似的问题,我的问题是ImageView而不是TextView,当我回去检查活动时,发现已经将变量声明为Button,然后将变量分配给findViewById(R .id.ivrest),其中ivRest指的是ImageView,因此只需确保您是否声明了具有特定类型的变量,则在重新分配该变量时,该变量应为同一类型