2014-09-11 3 views
0

J'ai un listview qui est rempli par un adaptateur personnalisé. Cette liste a une disposition personnalisée qui consiste en une vue d'image et une vue de texte.Cliquez sur le composant individuel dans une rangée de listview

Ce que je voudrais faire est quand j'appuie sur cette imageview à partir de n'importe quelle ligne, il va changer son interface utilisateur (setAlpha) et exécuter une demande de réseau en arrière-plan.

Cependant, je ne pouvais pas comprendre comment faire si le composant est unique individuellement. Quand je clique sur l'imageview de n'importe quelle rangée, seulement la dernière rangée sera affectée. J'ai fait tout cela dans l'adaptateur. Je pense que cela est évident parce que toutes les images incrustées sur cette mise en page obtiennent le même ID. Jusqu'ici, c'est comme ça que je l'ai fait mais je n'ai pas réussi à le faire fonctionner correctement. Comment puis-je cliquer sur un composant individuel sur une ligne listview et modifier son interface utilisateur par programme?

+0

Pas exactement une solution à votre problème, mais regardez cette vidéo par Chet Hasse vous devriez avoir une idée comment le faire. https://www.youtube.com/watch?v=YCHNAi9kJI4 – iZBasit

Répondre

1

essayer en utilisant le paramètre onClick view:

vh.ivHeart.setTag(lf); 
// only the last row affected 
    vh.ivHeart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      YOUR_CLASS_NAME obj=(YOUR_CLASS_NAME)view.getTag(); 
      if (!obj.isFollowed()) { 
       view.setAlpha(1f); 
       obj.setFollowed(true); 
      } else { 
       view.setAlpha(0.3f); 
       obj.setFollowed(false); 
      } 
     } 
0

Eh bien j'ai beaucoup de problèmes à résoudre ce problema mais je trouve une méthode pour corriger cette situation.

Dans la thats classe étend de BaseAdapter je déclare un ArrayList dans le constructeur de type objet comme:

ArrayList<Object> tags = new ArrayList<Object>(); 

pour quoi?

bien le problème est que l'événement onclick de bouton ou un autre composant ne connaissent que la dernière balise se référer à la dernière ligne ... c'est la raison pour affecter uniquement la dernière ligne ...

Alors

view.setTag(holder); 
      tags.add(view.getTag()); 

Voici une balise enregistrer la référence à holderview

public void onClick(View v) { 

       ComponentsHolder holder_current= (ComponentsHolder) tags.get(position); **//HERE we obtain the tag refer to correct holder of position row** 


      if(holder_current.Description.getVisibility()==View.VISIBLE) 
       holder_current.Description.setVisibility(View.GONE); 
      else 
       holder_current.Description.setVisibility(View.VISIBLE); 

      notifyDataSetChanged(); 

      } 
      }); 
Questions connexes