该位置将被自动管理。如果您的活动延伸ListActivity
或ListFragment
,您只需覆盖onListItemClick
。
@Override
protected void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
// your action
}
同样的,如果你的活动不延长ListActivity
或ListFragment
,你必须在ListView控件设置监听器:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
}
});
当然,这事件与列表中的全部项目。相反,如果你想为列表项中的每个视图设置一个监听器,你应该在你的适配器内部完成。假设使用ArrayAdapter
:
public class CustomAdapter extends ArrayAdapter<MyObject> {
private final Context context;
private ArrayList<MyObject> list;
public CustomAdapter(Context context, ArrayList<MyObject> list)
{
super(context, R.layout.adapter_row_path, list);
this.context = context;
this.list = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
PathHolder holder;
if(rowView ==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.adapter_row_path, parent, false);
holder = new ViewHolder();
holder.b1 = (Button) rowView.findViewById(R.id.b1);
holder.b2 = (Button) rowView.findViewById(R.id.b2);
rowView.setTag(holder);
}else {
holder = (ViewHolder) rowView.getTag();
}
setRow(holder, position);
return rowView;
}
private void setRow(Holder holder, position){
holder.b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// action on button 1 (you know also position here)
}
});
holder.b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// action on button 2 (you know also position here)
}
});
}
}
static class ViewHolder {
Button b1;
Button b2;
}