2017-04-05 2 views
0

Bonne journée!onItemLongClick ne mettra pas à jour un élément de vue dans listview

Je voudrais savoir la raison pour laquelle onItemLongClick ne mettra pas à jour un élément de vue dans listview mais quand j'ai utilisé onItemClick cela fonctionne comme prévu c'est l'extrait de mon code. Mes excuses j'ai oublié d'ajouter une déclaration de retour dans cet extrait, mais le problème n'est toujours pas résolu.

private void updateView(int position) { 
    View v = listView.getChildAt(position - 
      listView.getFirstVisiblePosition()); 

    ImageView tempImgView = (ImageView) v.findViewById(R.id.avatarIcon); 
    if (listView.isItemChecked(position)) { 
     tempImgView .setImageResource(R.drawable.ic_check_24dp); 
    } else { 
     tempImgView .setImageResource(R.drawable.ic_uncheck_24dp); 
    } 
} 


@Override 
public void onItemClick(AdapterView<?> arg0, View view, int position, 
     long id) { 
     updateView(position); 
     return true; 
} 

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, 
     long id) { 
    updateView(position); 
    return true; 
} 
+0

après la mise à jourView(). – Rajasekhar

+0

votre code ne compilera même pas. –

+0

Salut Toutes mes excuses j'ai oublié d'ajouter une déclaration de retour, mais le problème n'est toujours pas résolu. – Kuro

Répondre

1

Vous devez renvoyer true, afin que Android sache que votre clic a été consommé.

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, 
     long id) { 
    updateView(position); 
    return true; 
} 
+0

Correct, j'ajouterai seulement, qu'avec le retour vrai, Android ne sera pas dérangé par les événements onItemClick au cas où il l'implémente quelque part dans le code aussi. –

+0

Bonjour, mes excuses ont oublié d'ajouter une déclaration de retour sur ce problème, mais le problème n'est toujours pas résolu. – Kuro

-1

Après instancier vue de l'élément, définissez:

yourItemView.setLongClickable(true); 
yourItemView.setOnLongClickListener(this); 

Et rappelez-vous d'ajouter le retour de l'événement à long cliquez sur:

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, 
     long id) { 
    updateView(position); 
    return true; 
} 
+0

OnItemLongClick est un callback pour itens dans un listView, onLongClickListener ajoutera beaucoup de callbacks pour chaque item. –

+0

Bonjour Merci pour vos commentaires. J'ai déjà instancié toutes les vues et l'auditeur aussi mes excuses j'ai oublié d'ajouter ma déclaration de retour là mais le problème n'est toujours pas résolu – Kuro

0

Vous devrez retourner la valeur réelle de l'auditeur onItemLongClick , essayez ceci: -

@Override 
    public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, 
     long id) { 
    updateView(position); 
    return true; 
    } 

J'espère que cela vous aidera. :)

+0

Salut là merci pour vos commentaires mais mes excuses j'ai oublié d'ajouter la déclaration de retour mais le problème n'est toujours pas résolu. – Kuro