Android: передача переменной снаружи из AlertDialog onClick - PullRequest
2 голосов
/ 19 сентября 2010

Я хочу передать переменную во внешнюю функцию, когда пользователь нажимает «ОК» в AlertDialog.Я пытаюсь это, например, но он не распознает переменную (Yup).

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

Я знаю, что код немного испорчен, но это только для понимания.

Ценю помощь!

1 Ответ

5 голосов
/ 20 сентября 2010

Yup не распознается, потому что вы создаете строку в методе 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();
    }
}
...