1

View を拡張するクラスがあります (MyView は View を拡張します)

アクティビティには次のものがあります:

    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は ですが、View必ずしもViewであるとは限らないため、MyView明示的にキャストする必要があります。

クラッシュした場合は、ID のビューrelative_layout_viewのタイプが NOT であることを意味し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 に答える