带有子项的 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中的一个子项时,利用ContextMenu弹出菜单,那怎么获取这个子项的数据呢?