我有一个扩展View的类(MyView extends View)
在活动中我有下一个:
View view = (View)findViewById(R.id.relative_layout_view);
//here I have error because of cast
MyView myView = view;
为什么要求我添加演员?
P.S:我添加了演员和应用程序崩溃。
答案 0 :(得分:3)
MyView
是View
,但View
不一定是MyView
,因此您需要明确地投射它。
如果崩溃,则表示ID为relative_layout_view
的视图不是MyView
类型的视图,您需要确保其类型在布局XML中的类型。
答案 1 :(得分: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);
答案 2 :(得分:0)
为什么不做呢
MyView view = (MyView) findViewById(R.id.relative_layout_view);
答案 3 :(得分:0)
简单的答案是,您将view
实例向下投射到MyView
。
将任何对象向下转换为其子类并不总是安全的,这就是为什么编译器强制程序员明确地将其对象类型转换为子类。
在您的情况下,view
不属于MyView
类型。这就是编译器提供classCastException
的原因。
但如果R.id.relative_layout_view
属于MyWiew类型,则不会产生任何异常。