Android:将视图投射到视图

时间:2012-05-15 10:18:41

标签: android

我有一个扩展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:我添加了演员和应用程序崩溃。

4 个答案:

答案 0 :(得分:3)

MyViewView,但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类型,则不会产生任何异常。