Я надеюсь, что смогу помочь здесь. Я предполагаю, что у вас есть пользовательский макет для элементов listView, и этот макет состоит из кнопки и некоторых других представлений - таких как TextView, ImageView или что-то еще. Теперь вы хотите, чтобы другое событие срабатывало при нажатии кнопки, а другое событие - при нажатии на все остальное.
Вы можете достичь этого, не используя onListItemClick () вашего ListActivity.
Вот что вам нужно сделать:
Вы используете пользовательский макет, поэтому, вероятно, вы переопределяете метод getView () из своего пользовательского адаптера. Хитрость заключается в том, чтобы установить разных слушателей для вашей кнопки и разных для всего представления (вашего ряда). Взгляните на пример:
private class MyAdapter extends ArrayAdapter<String> implements OnClickListener {
public MyAdapter(Context context, int resource, int textViewResourceId,
List<String> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String text = getItem(position);
if (null == convertView) {
convertView = mInflater.inflate(R.layout.custom_row, null);
}
//take the Button and set listener. It will be invoked when you click the button.
Button btn = (Button) convertView.findViewById(R.id.button);
btn.setOnClickListener(this);
//set the text... not important
TextView tv = (TextView) convertView.findViewById(R.id.text);
tv.setText(text);
//!!! and this is the most important part: you are settin listener for the whole row
convertView.setOnClickListener(new OnItemClickListener(position));
return convertView;
}
@Override
public void onClick(View v) {
Log.v(TAG, "Row button clicked");
}
}
Ваш класс OnItemClickListener может быть объявлен как здесь:
private class OnItemClickListener implements OnClickListener{
private int mPosition;
OnItemClickListener(int position){
mPosition = position;
}
@Override
public void onClick(View arg0) {
Log.v(TAG, "onItemClick at position" + mPosition);
}
}
Конечно, вы, вероятно, добавите еще несколько параметров в конструктор OnItemClickListener.
И одна важная вещь - реализация getView, показанная выше, довольно уродлива, обычно вы должны использовать шаблон ViewHolder, чтобы избежать вызовов findViewById ... но вы, вероятно, уже знаете что.
Мой файл custom_row.xml - это RelativeLayout с Button of id «кнопка», TextView с идентификатором «text» и ImageView с идентификатором «image» - просто чтобы прояснить ситуацию.
Привет!