1

我有一个扩展视图的类(MyView 扩展视图)

在活动中,我有下一个:

    View view = (View)findViewById(R.id.relative_layout_view);

    //here I have error because of cast
    MyView myView = view;

为什么它要求我添加演员表?

PS:我添加了演员表并且应用程序崩溃了。

4

4 回答 4

3

MyView是 a View,但View不一定是 a MyView,因此您需要显式转换它。

如果它崩溃了,这意味着带有 ID 的视图relative_layout_view不是 type MyView,你需要确定它在布局 XML 中的类型是什么。

于 2012-05-15T10:20:50.887 回答
2

使用这种方式只需像添加xml一样

<YourPackage Name.MyView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/myview"
android:layout_gravity="center"
>   
</YourPackage Name.MyView>

然后在下面给出的活动中使用

   MyView view = (MyView)findViewById(R.id.relative_layout_view);
于 2012-05-15T10:33:32.563 回答
0

为什么不只是做

MyView view = (MyView) findViewById(R.id.relative_layout_view);
于 2012-05-15T10:22:00.560 回答
0

简单的答案是您将view实例向下转换为MyView.

将任何对象向下转换为其子类并不总是安全的,这就是编译器强制程序员将其对象显式类型转换为子类的原因。

在您的情况下,view不是 type MyView。这就是编译器给出的原因classCastException

但如果R.id.relative_layout_view是 MyWiew 类型,它不会产生任何异常。

于 2012-05-15T10:49:00.220 回答