我有一个扩展视图的类(MyView 扩展视图)
在活动中,我有下一个:
View view = (View)findViewById(R.id.relative_layout_view);
//here I have error because of cast
MyView myView = view;
为什么它要求我添加演员表?
PS:我添加了演员表并且应用程序崩溃了。
我有一个扩展视图的类(MyView 扩展视图)
在活动中,我有下一个:
View view = (View)findViewById(R.id.relative_layout_view);
//here I have error because of cast
MyView myView = view;
为什么它要求我添加演员表?
PS:我添加了演员表并且应用程序崩溃了。
MyView
是 a View
,但View
不一定是 a MyView
,因此您需要显式转换它。
如果它崩溃了,这意味着带有 ID 的视图relative_layout_view
不是 type MyView
,你需要确定它在布局 XML 中的类型是什么。
使用这种方式只需像添加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);
为什么不只是做
MyView view = (MyView) findViewById(R.id.relative_layout_view);
简单的答案是您将view
实例向下转换为MyView
.
将任何对象向下转换为其子类并不总是安全的,这就是编译器强制程序员将其对象显式类型转换为子类的原因。
在您的情况下,view
不是 type MyView
。这就是编译器给出的原因classCastException
。
但如果R.id.relative_layout_view
是 MyWiew 类型,它不会产生任何异常。