J'espère que je peux vous aider ici. Je suppose que vous avez une mise en page personnalisée éléments listView, et cette disposition se compose de bouton et quelques autres points de vue - comme TextView, ImageView ou quoi que ce soit. Maintenant, vous voulez avoir différentes événement lancé sur le bouton et cliquez sur les différents événements tiré sur tout le reste cliqué.
Vous pouvez le faire sans l'aide de onListItemClick() de votre ListActivity.
Voici ce que vous devez faire:
Vous utilisez la mise en page personnalisée, de sorte que probablement vous écrasez getView() la méthode de votre adaptateur personnalisé. L'astuce consiste à définir les différents auditeurs pour votre bouton et différents pour l'ensemble de la vue (votre ligne). Jetez un oeil à l'exemple:
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");
}
}
Votre OnItemClickListener la classe peut être déclarée comme ici:
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);
}
}
Bien sûr, vous aurez probablement ajouter un peu plus de paramètres à OnItemClickListener constructeur.
Et une chose importante - de la mise en œuvre de getView indiqué ci-dessus est assez laid, normalement, vous devriez utiliser ViewHolder modèle pour éviter findViewById appels.. mais vous savez probablement déjà que.
Mon custom_row.xml fichier est RelativeLayout avec Bouton d'id "bouton", TextView de l'id de "texte" et ImageView de id "image" - juste pour rendre les choses claires.
Ce qui concerne les!