2010-09-20 24 views
1

J'ai vraiment besoin d'aide sur ce point parce que c'est la seule chose qui ne fonctionne pas dans mon application. J'ai un listview géré par un adaptateur qui étend BaseAdapter.android onClick événement ne tirant pas

Dans la fonction getview, j'utilise convertView pour configurer OnClickListener. Ce OnClickListener fonctionne bien quand je touche l'écran mais si j'utilise la boule de commande du HTC Desire, je vois la ligne qui clignote sur l'écran, mais le OnClickListener n'est pas appelé ...

J'ai lu le android guide de dev: http://developer.android.com/guide/topics/ui/ui-events.html et son dire que je devrais recevoir un événement onClick de la boule de commande ...

Im mettant ici mon code getview au cas où quelqu'un verrait quelque chose d'étrange. Si vous avez une idée de ce que je peux faire, s'il vous plaît faites le moi savoir.

public View getView(int position, View convertView, ViewGroup parent) { 
     //ici on va utiliser un mécanisme de cache avec le Tag Holder 
     MyTag holder;   
     if (convertView == null){ 
      //On se branche sur le bon layout 
      // convertView = inflater.inflate(android.R.layout.simple_list_item_2, null) 
      convertView = inflater.inflate(R.layout.twolines, null); 
      holder   = new MyTag(); 
      //on récupère les éléments du layout dans le holder 
      holder.txtData = (TextView)convertView.findViewById(R.id.productTitle); 
      holder.txtExtra = (TextView)convertView.findViewById(android.R.id.text2); 
      holder.imgScreenshot = (ImageView)convertView.findViewById(R.id.Screenshot); 
      holder.imgFlag = (ImageView)convertView.findViewById(R.id.Flag); 

      //holder.mLoginButton = (LoginButton) convertView.findViewById(R.id.login); 
      holder.mPostButton = (ImageView) convertView.findViewById(R.id.postButton); 

      //sauvegarde du holder 
      convertView.setTag(holder); 
     } else { 
      holder = (MyTag)convertView.getTag(); 
     } 


     //Facebook post button management 
     holder.mPostButton.setOnClickListener((OnClickListener) new OnPostClickListener(convertView.getContext(),mFacebook, Long.toString(data[position].videoId), data[position].title, data[position].publisher, data[position].imageUrl)); 

     holder.mPostButton.setImageResource(com.cedemo.scan.utils.getPostButtonResId()); 


     //data update 
     if(data[position].title != null) 
      holder.txtData.setText(data[position].title); 
     if(data[position].publisher != null) 
      holder.txtExtra.setText(data[position].publisher); 



     //get and set the language flag 
     if(data[position].language != null) 
      holder.imgFlag.setImageResource(com.cedemo.scan.utils.getFlag(data[position].language)); 

     //set the screenshot 
     if(data[position].myVideoScreenshotBm != null) 
      holder.imgScreenshot.setImageBitmap(data[position].myVideoScreenshotBm); 


        /* ================================================================= 

         THIS FUNCTION IS NOT CALLED WHEN I CLICK ON THE TRACKBALL 
         BUT IS CALLED WHEN I TOUCH THE SCREEN. 
         WHEN I USE THE TRACKBALL THE SELECTED ROW IS FLASHING ONCE. 

         ================================================================= */ 
     //set the click mechanic if there is a valid video url 
     if(data[position].url != null) { 
      convertView.setOnClickListener((OnClickListener) new OnProductClickListener(position)); 


     } 

     return convertView; 
    } 
+0

Utilisez-vous réellement la boule de commande pour cliquer sur l'élément, ou faites-vous simplement défiler dessus? – Jwsonic

+0

pour faire défiler puis cliquer. – Fabien

Répondre

2

Peut-être que vous voulez utiliser plutôt la méthode recommandée setOnItemClickListener() sur la ListView - Je suppose que c'est un mauvais style pour définir les auditeurs directement dans l'adaptateur.

+0

Merci beaucoup. Ne sais pas pourquoi n'a pas essayé cette solution avant. Je suppose que c'est parce que je pensais que c'était exactement la même chose. Pour cela, je l'ai testé et je ne comprends pas pourquoi, mais son travail est meilleur. Cette fois-ci, la trackball déclenche l'événement. Je me demande vraiment pourquoi il y a une différence ... Si vous êtes autorisé à mettre en place l'événement click dans le convertview ... pourquoi cela fonctionnerait différemment, puis l'installer dans la liste elle-même ?? En tous cas. JE VOUS REMERCIE. – Fabien

+0

Je pense que vous avez eu quelques problèmes à cause des événements de trackball qui ne sont pas passés à la bonne vue. Vos vues de l'adaptateur sont des enfants de ListView, de sorte que ListView peut intercepter certains événements. Par conséquent, ceux-ci ne sont pas redirigés vers les vues enfant. – mreichelt