2011-08-31 35 views
0

美好的一天,我在下面的代碼中遇到了一些麻煩,我從這個鏈接中打勾的答案得到了一個解決方案。我想知道爲什麼。ClassCastException解釋

注:我有一個類似的問題佈局,但只有一個TextView。

solution link here

我下面的代碼:

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); 
} 

所以從他的解決辦法,如果我改變了這個

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

它解決了我的問題ClassCastException異常。

現在請有人向我解釋或指給我正確的方向,他在答案中的含義「您收到整個LinearLayout作爲參數v。您應該嘗試v.findViewById()然後使用這個textview「。它很好,它解決了我的問題,但我想明白爲什麼我必須這樣做?..我已經處理過ListViews,但我沒有遇到過這個,所以它對我來說很奇怪。謝謝。

+0

您的列表項目是否有類似的佈局? – Ronnie

回答

0

視圖V你得到的是其中包含TextView(可能還有其他視圖)的對象的整個佈局。

它不是TextView本身,你必須找到裏面的TextView。

0

它只是表示該列表項是包含在其中的LinearLayoutTextViewonItemClick獲取項目根目錄,而不是直接獲取其內容。這樣

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

東西,所以,當您收到點擊該項目時,項目的根,即LinearLayoutonItemClick通過。