findViewById 出现意外的 ClassCastException

3

我在使用可搜索字典玩转Android开发。

我的问题是,当修改XML布局时,我遇到了一些ClassCastException

我猜测R文件已经过时,但奇怪的是,即使重新创建R文件后仍然存在这个问题。

以下是相关代码和日志:

日志文件:

Caused by: java.lang.ClassCastException: android.widget.ImageButton E/AndroidRuntime( 438): at eu.accleaner.android.WordActivity.onCreate(WordActivity.java:87)

在Activity中涉及的行:

mDefinition = (TextView) findViewById(R.id.definition);

感谢您的帮助。

祝好,

Vincent

3个回答

3

看起来,在XML中有一个id为“definition”的ImageButton,而您正在尝试将其转换为TextView。将您的TextView转换更改为ImageButton。


20
这种情况通常是由于 R.java 中的资源 ID 值与其他预编译类文件不同步导致的。如果你使用 Eclipse,请执行 Project | Clean。如果你正在使用命令行构建,则应该使用 ant clean install 而不是仅使用 ant install - CommonsWare

3
我遇到了类似的问题。R.java根据xml中的android:id生成ID:
public static final int imageButton01=0x7f050001;
public static final int definition=0x7f050002;

当我添加新的imagebutton时,R.java将更新为:
public static final int imageButton01=0x7f050001;
public static final int imageButton02=0x7f050002;
public static final int definition=0x7f050003;

由于同步问题,R.id.definitionmDefinition = (TextView) findViewById(R.id.definition);中返回旧的ID0x7f050002。但它与更新后的R.java对应的另一个元素(ImageButton02)相对应。

因此,我们会出现ClassCastException错误。


0

解决方法:在布局XML中分配一些新的“id”值并使用findViewById()进行调用。

很可能是一个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接