Spero di poterti aiutare qui. Presumo che tu abbia un layout personalizzato per gli elementi listView e questo layout è costituito da pulsante e alcune altre visualizzazioni, come TextView, ImageView o altro. Ora vuoi che un evento diverso venga attivato al clic del pulsante e un evento diverso venga attivato su tutto il resto cliccato.
Puoi ottenerlo senza utilizzare onListItemClick () di ListActivity.
Ecco cosa devi fare:
Stai usando un layout personalizzato, quindi probabilmente stai sovrascrivendo il metodo getView () dall'adattatore personalizzato. Il trucco è impostare i diversi ascoltatori per il tuo pulsante e diversi per l'intera vista (la tua riga). Dai un'occhiata all'esempio:
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");
}
}
La tua classe OnItemClickListener potrebbe essere dichiarata come qui:
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);
}
}
Ovviamente probabilmente aggiungerai altri parametri al costruttore di OnItemClickListener.
E una cosa importante: l'implementazione di getView mostrata sopra è piuttosto brutta, normalmente dovresti usare il pattern ViewHolder per evitare chiamate findViewById .. ma probabilmente lo sai già.
Il mio file custom_row.xml è RelativeLayout con Button of id "button", TextView di id "text" e ImageView di id "image" - solo per rendere le cose chiare.
Saluti!