2010-09-19 69 views
2

我想在用户点击AlertDialog中的“OK”时将变量传递给外部函数。 我正在尝试这个例子,但它不会识别变量(YUP)。Android:从AlertDialog传递一个变量onClick

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

我知道代码有点搞砸了,但它只是为了理解。

感谢帮助!

+0

定义变量**字符串烨=“是”; **了从功能“点击”,并在该函数分配价值为。例如在“// fetching info”区域中查看:http://pastie.org/1168788 – 2010-09-19 20:32:19

+0

感谢您的回复。它仍然不会识别内部的“YUP”,只有外部的一个......这意味着什么都没有用户选择删除。:\ – 2010-09-19 20:52:23

+1

顺便说一句,没有理由做:'((Cursor )cur).moveToPosition(pos);'...只是使用:'cur.moveToPosition(pos);'。 – Cristian 2010-09-19 20:56:58

回答

5

由于您在onClick方法中创建了字符串,并且在onClick完成时它被回收,因此Yup无法识别。

我建议刚刚摆脱YUP,因为即使你解决这个问题,你也会遇到问题。该对话框将弹出,但在用户选择时,应用程序将已经通过if语句,所以Yup从未有机会等于“是”。换句话说,对话框不会暂停你的代码,并在通过“if(Yup ==”yes“)之前等待用户输入。此外,if语句应如下所示:if (Yup.equals("yes")),否则它将返回。假每次

我会让你的代码看起来是这样的:

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

这将是伟大的,但“bookmark_id”变量无法识别onClick和这是在第一个地方的问题:\ 任何想法如何将其传入内部?当我将它添加到onClick方法我得到一个错误它应该是一个接口f​​unc – 2010-09-19 20:46:50

+1

强制bookmark_id作为最终:最终字符串bookmark_id = ((Cursor)cur).getString(((Cursor)cur).getColumnIndex(Browser.BookmarkColumns._ID)); – magicman 2010-09-19 20:51:22

+0

完美!:)非常感谢! – 2010-09-19 20:53:50

相关问题