美好的一天,我在下面的代码中遇到了一些麻烦,我从这个链接的答案中得到了解决方案。我想知道原因。
注意:我有一个类似问题的布局类型,但只有一个TextView。
我的代码如下:
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 :(得分:0)
您可以先阅读:http://developer.android.com/reference/android/widget/LinearLayout.html
然后查看您为项目委托声明的布局。
显然你知道你的textView是R.id.search_device_id,所以你应该明白它包含在布局中,这是整个单元格,恰好是'v'
答案 1 :(得分:0)
您获得的View v是包含TextView(可能还有其他视图)的对象的整个Layout。
不是TextView本身,你必须找到它内部的TextView。
答案 2 :(得分:0)
这只是意味着列表项目是LinearLayout
,其中包含TextView
。 onItemClick
直接获取项目根目录而不是其内容。像这样的东西
<LinearLayout......>
<TextView........../>
............
</LinearLayout>
因此,当您收到该项目的点击时,项目根目录,即LinearLayout
将在onItemClick
中传递。