Mam nadzieję, że mogę tu pomóc. Zakładam, że masz niestandardowy układ elementów listView, a ten układ składa się z przycisku i kilku innych widoków - takich jak TextView, ImageView lub cokolwiek innego. Teraz chcesz, aby inne zdarzenie było uruchamiane po kliknięciu przycisku, a inne zdarzenie było uruchamiane po kliknięciu wszystkich pozostałych.
Możesz to osiągnąć bez użycia onListItemClick () swojego ListActivity.
Oto, co musisz zrobić:
Używasz niestandardowego układu, więc prawdopodobnie nadpisujesz metodę getView () z niestandardowego adaptera. Sztuczka polega na tym, aby ustawić różnych słuchaczy dla swojego przycisku i różnych dla całego widoku (wiersza). Spójrz na przykład:
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);
}
Button btn = (Button) convertView.findViewById(R.id.button);
btn.setOnClickListener(this);
TextView tv = (TextView) convertView.findViewById(R.id.text);
tv.setText(text);
convertView.setOnClickListener(new OnItemClickListener(position));
return convertView;
}
@Override
public void onClick(View v) {
Log.v(TAG, "Row button clicked");
}
}
Twoja klasa OnItemClickListener mogłaby zostać zadeklarowana w następujący sposób:
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);
}
}
Oczywiście prawdopodobnie dodasz więcej parametrów do konstruktora OnItemClickListener.
I jedna ważna rzecz - implementacja getView pokazana powyżej jest dość brzydka, normalnie powinieneś używać wzorca ViewHolder, aby uniknąć wywołań findViewById .. ale prawdopodobnie już to wiesz.
Mój plik custom_row.xml to RelativeLayout z przyciskiem o identyfikatorze „button”, TextView o identyfikatorze „text” i ImageView o identyfikatorze „image” - żeby wszystko było jasne.
Pozdrowienia!