我遇到运行时错误异常:
java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView
我的活动扩展了活动不 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)视图).getText()。toString()但仍然遇到运行时错误。
仅当我开始选择列表中的项目时才会发生运行时错误。
答案 0 :(得分:10)
android.R.layout.simple_list_item_2
的根目录是TwoLineListItem
窗口小部件,其中包含两个子项(两个TextViews
),两行文本。将此窗口小部件投射到TextView
将失败,但您在logcat
中看到的异常将失败。使用TextView
搜索所需的findViewById
:
String itemSelected = ((TextView) view.findViewById(android.R.id.text2)).getText().toString();
答案 1 :(得分: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父视图,View视图, int position,long id)
自:API Level 1回调方法在此项目中调用 已单击AdapterView。
如果需要,实施者可以调用getItemAtPosition(position) 访问与所选项目关联的数据。
参数
parent 发生点击的AdapterView。
查看已点击的AdapterView中的视图(这将是一个视图 由适配器提供)
位置视图中的位置 适配器。
id 点击的商品的行ID。
因此,作为参数传递给方法的视图实际上是一个TwoLineListItem,你应该将视图转换为的类型。
获得对TwoLineListItem的引用后,您可以访问其任何公共成员,包括两个TextViews:
公共TextView getText1()
从:API级别1返回ID为text1的项目句柄。
返回ID为text1的项目句柄。
公共TextView getText2 ()
从:API级别1返回ID为text2的项目句柄。
返回ID为text2的项目句柄。
答案 2 :(得分: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
有两个TextView
。
希望这会有所帮助。