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