2010-05-18 4 views
0

J'ai une activité dans laquelle ListView contient des éléments de disposition linéaire personnalisés pour chaque ligne. L'une des lignes a un bouton défini comme:Pourquoi l'événement OnClick de mes boutons ne se déclenche-t-il pas?

<Button 
      android:text="Pick a contact" 
      android:id="@+id/btnPickContact" 
      android:layout_width="wrap_content" 
      android:gravity="center_vertical" 
      android:layout_height="wrap_content"></Button> 

Puis, en java, j'ai ce code:

((Button) row.findViewById(R.id.btnPickContact)).setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
        intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
        act.startActivityForResult(intent, PICK_CONTACT); 
       } 
      }); 

Dans cette configuration l'événement ne démarre pas.

Aussi j'ai essayé en implémentant l'interface:

@Override 
    public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
      startActivityForResult(intent, PICK_CONTACT); 
    } 

toujours pas de chance, l'événement ne se déclenche pas.

Que faire?

Répondre

2

dans le fichier XML définissant le bouton, vous devez spécifier un gestionnaire à l'aide onclick = « somehandler ». Et dans votre activité ont

public someHandler(View v) { 
} 

v sera le bouton.

+0

Cela fonctionne, mais pourquoi cela doit-il être fait? – Pentium10

+0

Il s'agit d'une méthode alternative pour coder l'écouteur d'événement on-click. En effet, cela évite le problème, laissant le problème d'origine non résolu. –

0

Etes-vous sûr que c'est l'événement qui ne se déclenche pas et qui n'est pas un problème pour lancer l'intention?

ajouter log.d("Mytest","OnClick Fired!!!"); comme première ligne dans onClick, puis voir si vous obtenez votre message dans le journal de débogage.

+0

Oui, j'ai essayé ça. Aucune activité quelle qu'elle soit. – Pentium10

-1

essayer cette utiliser cette

(new OnClickListener(){.... 

au lieu de cette

(new View.OnClickListener(){.... 

est le code ici ...

((Button) row.findViewById(R.id.btnPickContact)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
       act.startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 
0

Vous devriez envisager de définir la propriété cliquable et forcusable à la disposition des lignes.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     //Inflate view .... 

     button1.setOnClickListener(onclickListener);  
     convertView.setClickable(true); 
     convertView.setFocusable(true); 
     return converView; 
} 
Questions connexes