J'ai fait une application à l'aide de la synchronisation de contact. Je liste les informations de contact suivantes avec la photo, le nom et le numéro. J'ai répertorié avec succès toutes ces choses dans une liste personnalisée Mais j'ai fait une même procédure à une autre activité. Utilisation de la liste personnalisée Quel est le problème? Voici mon exemple de codage: p> public class ContactListAdapter extends ArrayAdapter<ContactList> {
Context context;
int layoutResourceId;
ContactList objects[] = null;
View row;
public ContactListAdapter(Context context, int layoutResourceId, ContactList[] objects) {
super(context, layoutResourceId, objects);
// TODO Auto-generated constructor stub
this.context = context;
this.layoutResourceId = layoutResourceId;
this.objects = objects;
System.out.println(objects[1].getName());
System.out.println(objects[1].getNumber());
System.out.println(objects[1].getImageIcon());
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
row = convertView;
final ContactListHolder holder;
if ( row == null ) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ContactListHolder();
holder.image = (ImageView) row.findViewById(R.id.contactImage);
holder.name = (TextView) row.findViewById(R.id.contactName);
holder.number = (TextView) row.findViewById(R.id.contactNumber);
holder.check = (CheckBox) row.findViewById(R.id.selectedContact);
row.setTag(holder);
} else {
holder = (ContactListHolder)row.getTag();
}
ContactList contact = objects[position];
if(contact.imageIcon != null) {
Bitmap imgBitmap = BitmapFactory.decodeByteArray(contact.imageIcon, 0, contact.imageIcon.length);
holder.image.setImageBitmap(imgBitmap);
} else {
holder.image.setImageResource(R.drawable.ic_launcher);
}
holder.name.setText(contact.name);
holder.number.setText(contact.number);
holder.check.setChecked(objects[position].isSelected());
return row;
}
static class ContactListHolder {
ImageView image;
TextView name;
TextView number;
CheckBox check;
}
}
6 Réponses :
Dans des vues imbriquées, la vue enfant obtient toujours tous les événements tactiles d'abord. Si vous souhaitez la vue parent (dans votre cas, la ligne de listeView), pour obtenir un événement tactile, vous devez retourner false sur les événements enfant ou les définir pour être Android: Clickable = "False" Code> le manifeste. p>
Ajouter
android:clickable="false"
Je pense que vous devez définir toutes vos choses cliquables, par exemple. cases à cocher, boutons, etc. comme non concentrée (dans la classe Adapter).
Vous pouvez définir OnClick Stratége à la ligne de vue de Contact ListAdapter Class.
Essayez ceci:
Lorsque vous ajoutez la liste de liste, appelez p> aperçu ici p> P>
Je pense que cela devrait être marqué comme la réponse, car cela permet d'enregistrer les éléments à l'intérieur d'une liste d'affichage en même temps que les éléments de la liste elles-mêmes pour recevoir des événements.
J'ai le même problème lorsque je ne peux pas cliquer sur une autre partie d'un élément de la vue de la liste, vous pouvez simplement cliquer sur TextView ou ImageView à l'intérieur de cet élément. Donc j'ai défini mon texteView: mon article comme celui-ci: p> et en cliquant sur l'événement fonctionnait bien parce que je clique sur le texteView. J'espère aidera quiconque a le même problème. P> p>