我有一个自定义对话框,它扩展了Dialog并在其布局中有一个ListView。我通过扩展ArrayAdapter的自定义适配器填充我的ListView。这里是我的适配器,它包含给定列表项的onClick事件:包含ListView的对话框其项目不会触摸事件
public class PendingTimeslotArrayAdapter extends ArrayAdapter<PendingTimeslot> {
private final Context context;
private final PendingTimeslot[] values;
private final View[] views;
public PendingTimeslotArrayAdapter(Context context, PendingTimeslot[] values) {
super(context, R.layout.mystuff_timeslot_picker_dialog_list_item, values);
this.context = context;
this.values = values;
this.views = new View[values.length];
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(views[position] == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.mystuff_timeslot_picker_dialog_list_item, parent, false);
rowView.setTag((Integer)position);
((TextView)rowView.findViewById(R.id.mystuff_timeslot_picker_list_item_date_time)).setText(values[position].getDateTime());
((TextView)rowView.findViewById(R.id.mystuff_timeslot_picker_list_item_stage_name)).setText(values[position].getStageName());
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("getting touch event");
PendingTimeslot t = values[(Integer)(v.getTag())];
CheckBox checkBox = (CheckBox) v.findViewById(R.id.mystuff_timeslot_picker_list_item_checkbox);
checkBox.setChecked(!checkBox.isChecked());
t.toggle();
}
});
views[position] = rowView;
return rowView;
}
else
return views[position];
}
}
我的问题是,被点击列表中的项目的时候,他们没有得到触摸事件,所以我的onClick不会被调用。有趣的是,ListView是完全可滚动的,当一个物品离开可见区域并返回时,它变为可触摸的并且触发onClick事件。
我试着覆盖ListView及其onTouchEvent方法;当单击一个项目时,ListView上的onTouchEvent实际上不会被触发。我也尝试覆盖dispatchTouchEvent方法,并且它可以正常工作,获取所有触摸事件。
我在别处使用了类似的自定义ArrayAdapter(但不在对话框中),它的工作原理完美无瑕。我现在正在考虑这是一个错误。我错过了什么,或者我应该这样做(ListView与可点击的项目内的对话框)另一种方式?
编辑:
添加
rowView.setClickable(true);
rowView.setFocusable(true);
绝对没有。
EDIT2:
设置为我的ListView的onItemClickListener也不起作用,即使被滚出并返回到可见区的项目。
EDIT3:
我还注意到,当有16个项目(不是特殊号码)在ListView,最后5个项目没有得到我指定的高度(例如100像素)的布局我膨胀,他们的行为就像wrap_content。总而言之,我开始相信ListView不应该用在对话框中。