arrayAdapter
我有一个ListView
。在arrayAdapter
内,我调用的方法由于某种原因导致ClassCastException
。
arrayAdapter
String[] strings = /*...*/;
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.item,strings);
ListView listView = (ListView) (findViewById(R.id.listView));
listView.setAdapter(adapter);
崩溃代码
private void addListener() {
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {
TextView textView = (TextView) viewClicked;
}
});
}
答案 0 :(得分:2)
您在ListView中点击的视图不是TextView。 TextView可能包含在ListItem本身的布局中。所以它就像是
TextView friendRequest = (TextView) viewClicked.findViewById(R.id.friend_request);
注意标准变量命名约定,最好以修改的camel case和xml以你命名变量的方式声明变量(使用下划线空格修饰符)。
如果情况并非如此,请检查以确保您确实使用了正确的列表 -
第ListView s5_lv_friend_request_list = (ListView) findViewById(R.id.s5_tv_friend_request_list);
行暗示了
<ListView
android:id="@+id/s5_tv_friend_request_list"
... />
包含在您的xml中的某个位置。
答案 1 :(得分:0)
如果适配器的每一行都在膨胀TextView(convertView == TextView),那么您的代码才有效。如果这是真的,那就没关系。如果没有,你必须做:
TextView text = (TextView) viewClicked.findViewById(THE_ID_OF_THE_TEXT_VIEW);