设置OnItemClickListener时出现ClassCastException

时间:2014-05-14 18:21:37

标签: android listview adapter

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;
        }
    }); 
}

2 个答案:

答案 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);