2012-05-15 3 views
0

j'ai une classe qui étend View (MyView étend Voir)Android: Cast Voir pour voir

Dans l'activité suivante je:

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

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

Pourquoi son m'a demandé d'ajouter casting?

P.S: J'ai ajouté la distribution et l'application est en panne.

+0

avez-vous ajouté quoi que ce soit en xml – Khan

+0

oui, les boutons et ainsi de suite – Jim

Répondre

1

Utilisez cette technique suffit d'ajouter dans xml comme

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

et après que l'utilisation de l'activité comme indiqué ci-dessous

MyView view = (MyView)findViewById(R.id.relative_layout_view); 
+0

Exactement ce dont j'ai besoin, merci – Jim

3

MyView est un View, mais View est pas nécessairement un MyView, vous devez donc jeter explicitement.

Si elle tombe en panne, cela signifie que la vue avec l'ID relative_layout_view est pas de type MyView, vous devez vous assurer que soit son type dans le fichier XML de mise en page.

0

Pourquoi ne pas faire juste

MyView view = (MyView) findViewById(R.id.relative_layout_view); 
0

réponse simple est que vous êtes en train de couler votre instance view à MyView.

il n'est pas toujours sûr de réduire tout objet à sa sous-classe et c'est pourquoi le compilateur force le programmeur à explicitement convertir son objet en sous-classe.

Dans votre cas, view n'est pas de type MyView. et c'est la raison pour laquelle le compilateur donne classCastException.

Mais si R.id.relative_layout_view était de type MyWiew, cela n'aurait généré aucune exception.