2010-09-19 2 views
2

Я хочу передать переменную во внешнюю функцию, когда пользователь нажимает «ОК» в AlertDialog. Я пытаюсь это, например, но не будет распознавать переменную (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

Определение переменной ** Строка Угу = «да»; ** из функции «OnClick», и в этом значении функции ASSIGN для.. пример в области «// получение информации». Проверьте там: http://pastie.org/1168788 –

+0

Спасибо за ответ. Он все равно не узнает внутренний «YUP» только внешний ... что ничего не значит в случай, который пользователь решил удалить.: \ –

+1

Кстати, нет причин для этого: '((Курсор) cur) .moveToPosition (pos); '... просто используйте:' cur.moveToPosition (pos); '. – Cristian

ответ

5

Yup не распознается, потому что вы создаете строку в методе onClick, и она перерабатывается, когда onClick выполняется.

Я рекомендую просто избавиться от 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, я получаю сообщение об ошибке, это должно быть интерфейсом func. –

+1

cast bookmark_id как final: final String bookmark_id = ((Курсор) cur) .getString (((Курсор) cur) .getColumnIndex (Browser.BookmarkColumns._ID)); – magicman

+0

Отлично! :) Большое спасибо! –

Смежные вопросы