2011-10-04 5 views
1

J'ai une application Android utilisant ListActivity. Quand un élément de la liste est cliqué, je voudrais afficher une boîte de dialogue de confirmation à l'utilisateur, puis effectuer une action sur l'élément cliqué. Cependant, à partir du gestionnaire onClick de la boîte de dialogue, je ne peux pas accéder à la variable de position à partir de l'événement onClick de la liste, donc je ne peux pas dire sur quel élément l'utilisateur a cliqué.Android: Utiliser AlertDialog dans un événement onItemClick de ListView

Voici un exemple de ce que je suis en train de réaliser:

getListView().setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       switch (which){ 
       case DialogInterface.BUTTON_POSITIVE: 
        // This doesn't work, can't access position from here 
        Object o = MyListActivity.this.getListView().getItemAtPosition(position); 
        testFunction(o); 
        break; 
       } 
      } 
     }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(MyListActivity.this); 
     builder.setMessage("Are you sure you want to do this?").setPositiveButton("Yes", dialogClickListener) 
      .setNegativeButton("No", dialogClickListener).show(); 

    } 
}); 

Je suppose que je pourrais transmettre les informations en stockant dans une variable membre sur l'activité, mais il semble qu'il devrait y avoir un meilleure solution! Quelqu'un peut-il me renseigner sur la façon correcte/sensée de le faire?

Merci, Andy

Répondre

2

Je ne sais pas si cela est la « bonne » façon de le faire ou non, mais vous pouvez le faire:

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
    final int InternalPosition = position; 

Et puis dans l'utilisation du gestionnaire « InternalPosition »

Object o = MyListActivity.this.getListView().getItemAtPosition(InternalPosition); 

Vous ne savez pas si cela fonctionnera dans votre cas, mais je sais que vous pouvez accéder aux variables «finales» de l'écouteur.

+0

Sonne comme une manière décente de le faire, merci! –

Questions connexes