2010-09-20 118 views
1

我真的需要這一點幫助,因爲在我的應用程序不能正常工作的唯一的東西。 我有被擴大BaseAdapter適配器管理列表視圖。Android的onClick事件不觸發

在使用convertView建立OnClickListener的getview功能IM。 這OnClickListener工作得很好,當我觸摸屏幕,但如果我使用的HTC Desire的軌跡球,我看到了排在屏幕上閃爍,但OnClickListener不叫......

我讀過了Android開發指南:http://developer.android.com/guide/topics/ui/ui-events.html 和它的說,我應該從軌跡球收到一個onClick事件...

我把這裏我的getview代碼,以防有人看到任何奇怪的東西。如果您對我能做什麼有所瞭解,請告訴我。

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

你實際使用軌跡球點擊項目,或者只是滾動了他們嗎? – Jwsonic 2010-09-20 13:22:03

+0

滾動,然後點擊。 – Fabien 2010-09-22 11:56:02

回答

2

也許你想使用ListView控件的推薦方法0​​而不是 - 我想這是一個糟糕的風格,直接在適配器內設置的聽衆。

+0

非常感謝。不知道爲什麼沒有嘗試過此解決方案。我猜是因爲我認爲它完全一樣。因此,我測試了它,我不明白爲什麼,但它的工作更好。這一次,軌跡球正在發射事件。我真的很想知道爲什麼會有區別......如果允許在convertview中設置click事件...爲什麼它的工作方式不同,然後在listview本身中設置它?無論如何。謝謝。 – Fabien 2010-09-20 15:19:40

+0

我認爲你有一些問題,因爲軌跡球事件沒有得到正確的看法。您的適配器視圖是ListView的子視圖,因此ListView可能捕獲一些事件。因此這些不會被重定向到子視圖。 – mreichelt 2010-09-20 15:40:47