2011-08-31 6 views
0

Bonjour, j'avais un peu de mal avec le code suivant ci-dessous et j'ai obtenu une solution à partir d'une réponse cochée dans ce lien. J'aimerais savoir pourquoi.ClassCastException Explication

Remarque: j'avais un type de mise en page similaire à celui de la question, mais avec un seul TextView.

solution link here

mon code ci-dessous:

public void onItemClick(AdapterView<?> av, View v, int position, long id) { 
     blueadapter.cancelDiscovery(); 

    String info = ((TextView) v).getText().toString(); //classcastException here 
    String Bluetooth_address = info.substring(info.length()-17); 
} 

donc de sa solution, si je change cela à ce

String info = ((TextView) v.findViewById(R.id.search_device_id)).getText().toString(); 

il résout mon problème de ClassCastException.

Maintenant s'il vous plaît quelqu'un peut m'expliquer gentiment ou me diriger vers la bonne direction, ce qu'il voulait dire par dans la réponse "Vous recevez l'ensemble LinearLayout comme paramètre v. Vous devriez essayer v.findViewById() et ensuite utiliser ce textview. " c'est gentil il résout mon problème, mais je voudrais comprendre pourquoi je devais faire cela? .. J'ai eu affaire avec ListViews avant, mais je ne suis pas tombé sur ceci, donc c'est un peu étrange pour moi. Je vous remercie.

+0

Avez-vous une disposition similaire pour vos éléments de liste? – Ronnie

Répondre

0

The View v que vous obtenez est la mise en page entière pour l'objet qui a le TextView (et probablement d'autres vues) à l'intérieur.

Ce n'est pas le TextView lui-même, vous devez trouver le TextView qui est à l'intérieur.

0

vous pouvez commencer par lire ceci: http://developer.android.com/reference/android/widget/LinearLayout.html

alors jetez un oeil à la disposition que vous déclarez pour votre délégué de l'article.

Évidemment, vous savez que votre textView est R.id.search_device_id, vous devez donc comprendre qu'il est inclus dans une mise en page, qui est la cellule entière, et qui se trouve être « v »

0

Cela signifie simplement que le listitem est un LinearLayout et qu'il contient TextView. Le onItemClick prend l'élément racine, pas son contenu directement. Quelque chose comme ça

<LinearLayout......> 
    <TextView........../> 
    ............ 
</LinearLayout> 

Ainsi, lorsque vous recevez un clic sur l'élément, la racine des éléments, à savoir le LinearLayout est passé dans le onItemClick.