在其单击上获取自定义列表视图项的文本

时间:2014-02-28 12:18:34

标签: android listview android-listview

我有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定义的列表视图的自定义项目时,如何获取所单击项目的文本(技术上是文本视图)?

3 个答案:

答案 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

您还可以使用setTaggetTag

你使用了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;
        } 

     }