7
votes

Je ne peux pas cliquer sur la liste de liste dans Android?

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 listview forte>, mais je ne peux pas cliquer sur la liste listview forte>. On dirait que c'est verrouillé, incapable de cliquer dessus.

Mais j'ai fait une même procédure à une autre activité. Utilisation de la liste personnalisée listview forte> mais je peux cliquer sur cette vue et ça fonctionne bien. P>

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;
    }
}


0 commentaires

6 Réponses :


9
votes

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" le manifeste.


0 commentaires

8
votes

Ajouter

 android:clickable="false"


0 commentaires

3
votes

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). xxx


0 commentaires

0
votes

Vous pouvez définir OnClick Stratége à la ligne de vue de Contact ListAdapter Class. xxx


0 commentaires


0
votes

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: xxx

mon article comme celui-ci: xxx

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.


0 commentaires