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)
您正确阅读了错误,它是ClassCastException
。 Caused 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
异步任务尝试调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'[重复]