2

我得到运行时错误异常:

java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView

我的 Activity 扩展了 Activity而不是ListActivity ,这是我的布局结构:

<LinearLayout ...> <ListView ...></ListView> </LinearLayout>

爪哇:

   ListView lv1 = (ListView) findViewById(R.id.listViewXMLdata);
    ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2,
        android.R.id.text2, getResources().getStringArray(R.array.countries));

    lv1.setAdapter(arrAdapter);

    lv1.setOnItemClickListener(new OnItemClickListener() {          
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            lView.getItemAtPosition(position);

            String itemSelected = ((TextView) view).getText().toString();
            Toast.makeText(getApplicationContext(), "Clicked Position Number " + position + ": " + itemSelected ,
                    Toast.LENGTH_SHORT)
                    .show();


        }
    });

我唯一主要关心的是在我的列表中获取字符串(选择的项目)。

注意 1:我没有在任何数据库上工作。

注意 2:我已经尝试将其转换为 CharSequence itemSelected = ((TextView) view).getText().toString() 但仍然出现运行时错误。

仅当我开始选择列表中的项目时才会发生运行时错误。

4

3 回答 3

9

android.R.layout.simple_list_item_2有一个小部件作为它的根,它有TwoLineListItem两个孩子(两个TextViews),两行文本。将此小部件转换为 aTextView将失败,您在logcat. 搜索所需TextViewfindViewById

String itemSelected = ((TextView) view.findViewById(android.R.id.text2)).getText().toString();
于 2012-10-03T19:38:24.337 回答
1

您的 ListView 正在加载 TwoLineListItem 类型,并且您正在尝试将 View 转换为以下行中的 TextView:

String itemSelected = ((TextView) view).getText().toString();

将其更改为:

String itemSelected = ((TwoLineListItem) view).getText1().getText();

应该管用。

编辑:

Android 文档位于:http: //developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html 说:

public abstract void onItemClick (AdapterView parent, View view, int position, long id)

自:单击此 AdapterView 中的项目时要调用的 API 级别 1 回调方法。

如果实施者需要访问与所选项目关联的数据,他们可以调用 getItemAtPosition(position)。

参数

parent 单击发生的 AdapterView。

view 被点击的 AdapterView 中的视图(这将是适配器提供的视图)

position 视图在适配器中的位置。

id 单击的项目的行 id。

因此,作为参数传递给该方法的视图实际上是 TwoLineListItem,您应该将视图转换为的类型。

一旦获得对 TwoLineListItem 的引用,您就可以访问它的任何公共成员,包括两个 TextView:

公共TextView getText1()

自:API 级别 1 返回 ID 为 text1 的项目的句柄。

返回 ID 为 text1 的项目的句柄。

公共TextView getText2 ()

自:API 级别 1 返回 ID 为 text2 的项目的句柄。

返回 ID 为 text2 的项目的句柄。

于 2012-10-03T19:39:28.503 回答
0

此外,您可以查看android.R.layout.simple_list_item_2,然后您会发现布局 xml 如下:

    <TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/listPreferredItemHeight"
        android:mode="twoLine"
        android:paddingStart="?attr/listPreferredItemPaddingStart"
        android:paddingEnd="?attr/listPreferredItemPaddingEnd">

        <TextView android:id="@id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textAppearance="?attr/textAppearanceListItem" />

        <TextView android:id="@id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/text1"
        android:layout_alignStart="@id/text1"
        android:textAppearance="?attr/textAppearanceListItemSecondary" />

    </TwoLineListItem>

TwoLineListItem两个TextViews。希望这可以帮助。

于 2015-07-19T08:35:24.063 回答