ClassCastException解释

时间:2011-08-31 16:29:16

标签: android

美好的一天,我在下面的代码中遇到了一些麻烦,我从这个链接的答案中得到了解决方案。我想知道原因。

注意:我有一个类似问题的布局类型,但只有一个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,但我没有遇到过这个,所以它的那种对我来说很奇怪。谢谢。

3 个答案:

答案 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,其中包含TextViewonItemClick直接获取项目根目录而不是其内容。像这样的东西

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

因此,当您收到该项目的点击时,项目根目录,即LinearLayout将在onItemClick中传递。