1

我有一个项目,我正在尝试为 ImageView 创建一个子类,以添加一些我想使用的方法。我只有几周的 Android 编码经验,所以我不是很有经验,而且对 OOP 还很陌生。因为我无法让它在我的主项目中工作,所以我做了一个小测试项目,唉,我得到了同样的错误。

首先,我创建了一个扩展 ImageView 的新类 ImageViewCustom.java

public class ImageViewCustom extends ImageView {}

(我已经添加了超类的构造函数)

在 XML 中,我在这里阅读后确实喜欢

<ImageView class="com.example.testcustomclass.ImageViewCustom" 
    android:id="@+id/imageViewCustom" ... />

这可以构建和运行,但是当我尝试像这样在 MainActivity 中引用它时

ImageViewCustom imageViewTest = (ImageViewCustom)
    findViewById(R.id.imageViewCustom);

我得到...

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity
    ComponentInfo{com.example.testcustomclass.MainActivity}:
    java.lang.ClassCastException: android.widget.ImageView 
    cannot be cast to com.example.testcustomclass.ImageViewCustom

我究竟做错了什么?D:我认为我遗漏了一些非常基本的东西,因为这是一个几乎是空的项目。仅供参考,我正在尝试在今晚之前完成一项任务(嗯!)并且得到了太多重复的代码,我想做一个子类,但我很难过和压力过大>_<睡眠不足等。

(编辑,修复代码格式...)

4

2 回答 2

3

好吧,您的 XML 已关闭...我总是使用

<com.my.project.MyView
     android:id="..."
/>

我认为这是正确的做法。

于 2013-02-15T17:58:01.870 回答
0

如果您在 xml 布局中引用您的视图,则不需要使用类

代替

<ImageView class="com.example.testcustomclass.ImageViewCustom" 
    android:id="@+id/imageViewCustom" ... />

<com.example.testcustomclass.ImageViewCustom
    android:id="@+id/imageViewCustom" ... />
于 2013-02-15T18:11:02.170 回答