带有子项的 Android ListView 导致无法将 TwoLineListItem 强制转换为 android.widget.TextView

Posted

技术标签:

【中文标题】带有子项的 Android ListView 导致无法将 TwoLineListItem 强制转换为 android.widget.TextView【英文标题】:Android ListView with subitem causes TwoLineListItem cannot be cast to android.widget.TextView 【发布时间】:2016-03-25 18:10:17 【问题描述】:

我创建了一个可以显示项目和子项目列表的 ListView,遵循这个问题:android-listview-subitems。

但是,当我单击其中一行时,出现错误:E/MessageQueue-JNI: java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView

只有在我向 ListView 中的每个项目添加子项目后,该错误才开始发生。

listView 的监听器发生错误,代码如下:

   //listview listener
lvAppFeatures.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

        //find the selected item and store the value to send to next screen
        strSelectedFeature = ((TextView) view).getText().toString();

        //move to display screen
        Intent switchActivity = new Intent(MainActivity.this,
                NextActivity.class);

        startActivity(switchActivity);
    
);

有没有办法在 ListView 中有一组项目和一个子项目,但又打算打开另一个活动?

【问题讨论】:

这个问题被否决了?不解释?如果你对这个问题投了反对票,我肯定想知道为什么。 【参考方案1】:

看来你正在使用 android.R.layout.simple_list_item_2

<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="2dip"
android:paddingBottom="2dip"
android:layout_
android:layout_>

<TextView android:id="@android:id/text1"
    android:layout_
    android:layout_
    style="?android:attr/listItemFirstLineStyle"/>

<TextView android:id="@android:id/text2"
    android:layout_
    android:layout_
    android:layout_below="@android:id/text1"
    style="?android:attr/listItemSecondLineStyle" />

</TwoLineListItem> 

一) 直接从适配器获取项目

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

    //find the selected item and store the value to send to next screen
    strSelectedFeature = (String)parent.getAdapter().getItem(position);

或 B),如果您想访问 textviews

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

    //find the selected item and store the value to send to next screen
    TextView textView1 = view.findViewById(android.R.id.text1);
    TextView textView2 = view.findViewById(android.R.id.text2);
    //do other things like textView1.getText() etc

【讨论】:

感谢 Aelimill - 我接受了答案并基本上采用了第一种方法。由于您的第一个建议,我只是直接访问传入参数“位置”以选择行。不需要使用 strSelectedFeature = (String)parent.getAdapter().getItem(position);因为这对我来说崩溃了。

以上是关于带有子项的 Android ListView 导致无法将 TwoLineListItem 强制转换为 android.widget.TextView的主要内容,如果未能解决你的问题,请参考以下文章

在Android中动态添加子项到ListView

在 Android 中添加 ListView 子项文本

在android中,当我按了listview中的一个子项时,利用ContextMenu弹出菜单,那怎么获取这个子项的数据呢?

更改可扩展 ListView Android 中单击的子项的背景颜色

如何将带有列表视图的小部件限制为其子项的大小?

如何在ListView中显示HashMap中的项目和子项目