Сподіваюся, я можу тут допомогти. Я припускаю, що у вас є власний макет для елементів 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 з кнопкою id "button", TextView id "text" та ImageView id "image" - лише для того, щоб все зрозуміло.
З повагою!