2010-09-19 7 views
2

Je veux passer une variable à une fonction externe lorsque l'utilisateur clique sur "OK" dans AlertDialog. J'essaye ceci par exemple mais il ne reconnaîtra pas la variable (Yup). Je sais que le code est un peu foiré, mais c'est seulement pour des raisons de compréhension.Android: Passer une variable à l'extérieur de AlertDialog onClick

Appréciez l'aide!

+0

définir la variable ** chaîne Yup = "yes"; ** hors de la fonction "onclick" et que la valeur assign de fonction pour.. Exemple dans la zone "// Récupération des infos" Cochez ici: http://pastie.org/1168788 –

+0

Merci de répondre, il ne reconnaîtra toujours pas le "YUP" intérieur seulement l'extérieur ... ce qui ne veut rien dire cas, l'utilisateur a choisi de supprimer.: \ –

+1

Btw, aucune raison de faire: '((Curseur) cur) .moveToPosition (pos); '... il suffit d'utiliser:' cur.moveToPosition (pos); '. – Cristian

Répondre

5

Yup n'est pas reconnu car vous créez la chaîne dans la méthode onClick et il est recyclé lorsque onClick est terminé.

Je recommande juste de se débarrasser de Yup, parce que même si vous résolvez cela, vous aurez des problèmes. La boîte de dialogue apparaîtra, mais au moment où l'utilisateur sélectionne, l'application aura déjà passé par l'instruction if, donc Yup n'a jamais une chance d'égaler "Oui". En d'autres termes, la boîte de dialogue n'interrompe pas votre code et attend la saisie de l'utilisateur avant de passer par "if (Yup ==" yes "). En outre, l'instruction if doit ressembler à ceci: if (Yup.equals("yes")), sinon, elle retournera . false chaque

je faire ressembler votre code comme ceci:

public final void deleteBookmark(Cursor cur, int pos) { 

    //fetching info 
    ((Cursor) cur).moveToPosition(pos); 
    final String bookmark_id = ((Cursor) cur).getString(((Cursor) cur).getColumnIndex(Browser.BookmarkColumns._ID)); 
    final String bookmark_title = ((Cursor) cur).getString(((Cursor) cur).getColumnIndex(Browser.BookmarkColumns.TITLE)); 

    //asking user to approve delete request 
    AlertDialog alertDialog = new AlertDialog.Builder(Dmarks.this).create(); 
    alertDialog.setTitle("Delete" + " " + bookmark_title); 
    alertDialog.setIcon(R.drawable.icon); 
    alertDialog.setMessage("Are you sure you want to delete this Bookmark?"); 
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      //deleting if user approved 
      getContentResolver().delete(Browser.BOOKMARKS_URI, "_id = " + bookmark_id, null); 

      //notifying user for deletion 
      Context context = getApplicationContext(); 
      Toast.makeText(context, bookmark_title + " " + "deleted" , Toast.LENGTH_SHORT).show(); 
      } }); 
    alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Context context = getApplicationContext(); 
       Toast.makeText(context, "canceled" , Toast.LENGTH_SHORT).show(); 
     } }); 
    alertDialog.show(); 
    } 
} 
+0

Ce sera génial mais la variable "bookmark_id" n'est pas reconnue dans le onClick et c'était le problème en premier lieu: \ Toute idée comment puis-je le passer à l'intérieur? Quand je l'ajoute à la méthode onClick j'obtiens une erreur c'est supposé être une fonction d'interface –

+1

cast bookmark_id comme final: final String bookmark_id = ((Cursor) cur) .getString (((Cursor) cur) .getColumnIndex (Browser.BookmarkColumns._ID)); – magicman

+0

Parfait! :) Merci beaucoup! –

Questions connexes