我有ListView
的自定义布局,如下所示 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/plain" >
<TextView
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dip"
android:textSize="16sp"
android:textColor="#000000"
android:paddingRight="10dip"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
当我点击列表视图中的项目时,我收到错误 -
02-28 17:37:38.240:E / AndroidRuntime(20869):致命异常:主要 02-28 17:37:38.240:E / AndroidRuntime(20869): java.lang.ClassCastException:android.widget.LinearLayout不能 强制转换为android.widget.TextView
这是因为我现在使用自定义列表视图布局,它包含在linearlayout中。
错误行是 -
class ListItemClickedonPaired implements OnItemClickListener
{
@SuppressLint("NewApi")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
final String info = ((TextView) view).getText().toString(); //ERROR HERE
}
}
我的问题是 -
当我们将这些项目作为使用上述xml定义的列表视图的自定义项目时,如何获取所单击项目的文本(技术上是文本视图)?
答案 0 :(得分:4)
尝试
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
TextView tv = (TextView)view.findViewById(android.R.id.text1);
String info = tv.getText().toString();
}
您为每行夸大LinearLayout
。您正在做的是将LinearLayout
投射到TextView
。
您还可以使用setTag
和getTag
你使用了android框架中的id。因此,android.R.id.text1
不是R.id.text1
因为android:id="@android:id/text1"
。这是我编辑过的一个错误。
http://developer.android.com/reference/android/R.id.html
public static final int text1
Added in API level 1
Constant Value: 16908308 (0x01020014
答案 1 :(得分:1)
Instead of writing a text view inside a Linear layout make the TextView as the root Tag so that the view argument in the OnItemClick() returns the reference of text view, Now you can directly typecast the view object to the TextView.
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dip"
android:textSize="16sp"
android:textColor="#000000"
android:paddingRight="10dip"
android:textAppearance="?android:attr/textAppearanceLarge" />
答案 2 :(得分:0)
试试这个:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
switch(view.getId()) {
case R.id.text1:
final String info = ((TextView) view).getText().toString();
break;
}
}