2

当用户在 AlertDialog 中单击“确定”时,我想将变量传递给外部函数。例如,我正在尝试此操作,但它无法识别变量(是的)。

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

        //fetching info
        ((Cursor) cur).moveToPosition(pos);
        String bookmark_id = ((Cursor) cur).getString(((Cursor) cur).getColumnIndex(Browser.BookmarkColumns._ID));
        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) {
                 **String Yup = "yes";**
            } });
        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();

        **if (Yup == "yes")** {
         //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();
        }
    }

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

感谢帮助!

4

1 回答 1

6

是的,因为您在 onClick 方法中创建了字符串,所以无法识别,并且在 onClick 完成后它会被回收。

我建议只是摆脱 Yup,因为即使你解决了这个问题,你也会遇到问题。对话框会弹出,但是当用户选择时,应用程序已经完成了 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();
    }
}
于 2010-09-19T20:39:56.110 回答