你好,下面的代码我遇到了一些小问题,我从这个链接中的一个勾选的答案中得到了一个解决方案。我想知道为什么。
注意:我有一个类似于问题的布局类型,但只有一个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.findViewById(),然后使用这个文本视图。”它很好地解决了我的问题,但是我想知道为什么我要这么做?我以前和ListViews打交道过,但我没有遇到这种情况,所以这对我来说有点奇怪。谢谢。
发布于 2011-08-31 16:35:42
您得到的views是包含TextView (可能还有其他视图)的对象的整个布局。
这不是TextView本身,您必须找到它里面的TextView。
发布于 2011-08-31 16:33:12
您可以从阅读以下内容开始:http://developer.android.com/reference/android/widget/LinearLayout.html
然后查看为项目委托声明的布局。
很明显,您知道您的textView是R.id.search_device_id,所以您应该理解它包含在布局中,它是整个单元格,碰巧是'v‘。
发布于 2011-08-31 16:38:51
它仅仅意味着listitem是一个LinearLayout,TextView包含在其中。onItemClick获取项根,而不是直接获取其内容。就像这样
<LinearLayout......>
<TextView........../>
............
</LinearLayout>因此,当您收到对项目的单击时,条目根,即LinearLayout将在onItemClick中传递。
https://stackoverflow.com/questions/7260278
复制相似问题