Android:从AlertDialog onClick向外传递变量

Android:从AlertDialog onClick向外传递变量,android,android-alertdialog,Android,Android Alertdialog,我想在用户单击AlertDialog中的“OK”时将变量传递给外部函数。 我正在尝试这个例子,但它无法识别变量(是的) 我知道代码有点混乱,但这只是为了理解 谢谢你的帮助 Yup未被识别,因为您在onClick方法中创建了字符串,并且在onClick完成时它会被回收 我建议你干脆把它扔掉,因为即使你解决了这个问题,你也会有问题的。对话框将弹出,但当用户选择时,应用程序将已经通过if语句,因此Yup永远没有机会等于“是”。换句话说,对话框在执行“if(Yup==”yes“)之前不会暂停代码并等待用

我想在用户单击AlertDialog中的“OK”时将变量传递给外部函数。 我正在尝试这个例子,但它无法识别变量(是的)

我知道代码有点混乱,但这只是为了理解


谢谢你的帮助

Yup未被识别,因为您在onClick方法中创建了字符串,并且在onClick完成时它会被回收

我建议你干脆把它扔掉,因为即使你解决了这个问题,你也会有问题的。对话框将弹出,但当用户选择时,应用程序将已经通过if语句,因此Yup永远没有机会等于“是”。换句话说,对话框在执行“if(Yup==”yes“)之前不会暂停代码并等待用户输入。此外,if语句应该如下所示:
if(Yup.equals(“yes”))
,否则每次都会返回false

我将使您的代码如下所示:

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();
    }
}

从函数“onClick”中定义变量字符串Yup=“yes”;并在该函数中赋值。例如,在区域“//fetching info”中。检查:感谢您的回复。它仍然无法识别内部“Yup”而只能识别外部“Yup”…如果用户选择删除,这意味着什么都没有。:\Btw,没有理由这样做:
((光标)cur).moveToPosition(pos);
…只需使用:
cur.moveToPosition(pos);
。谢谢;)就可以了!保存一些代码(我甚至不知道为什么在这里使用(光标)cur…我在应用程序的其余部分没有使用。这将非常好,但是“书签”\u id“在onClick中无法识别变量,这就是问题所在:\n知道如何在内部传递它吗?当我将它添加到onClick方法时,我得到一个错误,它应该是一个接口func.cast bookmark\u id作为final:final String bookmark\u id=((Cursor)cur).getString(((Cursor)cur).getColumnIndex(Browser.bookmark columns._ID));
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();
    }
}