2013-10-28 2 views
3

У меня есть следующая ситуация:Как вернуть Boolean из кнопки Dialog?

У меня есть метод, который выполняет некоторые проверки пользовательских входов.

метод возвращает true или false.

Теперь мой метод вызывает некоторые диалоги, если это так.

Я не могу вернуть булевую форму onClick, потому что onClick возвращает пустоту.

Возможно, кто-нибудь предложит мне обходное решение ???

Спасибо !!!

public Boolean retrunvalue=false; 
private Boolean performchecks() { 

    if (!reminderdatepicked && !remindertimepicked) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(
       NewGenericEvent.this); 
     builder.setTitle(R.string.remindernotsettitle); 
     builder.setMessage(R.string.remindernotmessage) 
     .setPositiveButton(R.string.yes, 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, 
        int id) { 
       retrunvalue= true;//NOT A GOOD IDEA 
                 //BECAUSE IT RETURNS TRUE 
                 //ONLY WHEN performchecks() 
                 //IS CALLED THE SECOND TIME 
      } 
     }); 
     builder.setNegativeButton(R.string.no, 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, 
        int id) { 
       retrunvalue= false; 
      } 
     }); 

     builder.create().show(); 
     return retrunvalue; 
    } 


    return true; 
} 
+0

@Maxim Shoustin да, но если пользователь нажимает на кнопку положительный это должен возвращать «истинную» возможность немедленно, а не когда 'performchecks()' вызывается второй раз –

ответ

2

Что вы пытаетесь сделать, это блокировать основной поток пользовательского интерфейса до получения ответа от нажмите на OK. Не хорошая идея.

Об этой проблеме вы можете найти в Google groups, но предлагаемое решение слишком сложно для вашей цели (на ваш выбор).

В любом случае я хотел бы создать обработчик, который должен заботиться о кнопке мыши, как:

protected static final int DIALOG_CLICKED = 1; 

private Handler mHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     String txt; 
     switch (msg.what) { 
     case DIALOG_CLICKED: 
      Boolean bool = Boolean.parseBoolean(msg.obj.toString()); 
      // When user press on "OK", 
      // your braking point goes here 
      break; 
     default: 
      super.handleMessage(msg); 
     } 
    } 
}; 

После изменения performchecks:

private void performchecks() { 

     AlertDialog.Builder builder = new AlertDialog.Builder(
       this); 
     builder.setTitle(R.string.remindernotsettitle); 
     builder.setMessage(R.string.remindernotmessage) 
     .setPositiveButton(R.string.yes, 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, 
        int id) { 

       mHandler.sendMessage(mHandler.obtainMessage(DIALOG_CLICKED, true)); 
      } 
     }); 
     builder.setNegativeButton(R.string.no, 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, 
        int id) { 
       mHandler.sendMessage(mHandler.obtainMessage(DIALOG_CLICKED, false)); 
      } 
     }); 

     builder.create().show();   
} 
+0

спасибо Максиму! Я думал о чем-то подобном, дело в том, что нет необходимости выполнять проверки внутри 'onClick', проверки выполняются раньше, мне нужно возвращать' true', если нажата положительная кнопка, и 'false', если нажата отрицательная кнопка ...: -/ –

+0

Итак, это причина, по которой мы используем AsyncTask run inbackground. Когда пользователь pres на Ok, мы запускаем asynctask и возвращаем true только после выполнения проверок –

+0

doInBackground возвращает true вместо диалога (как я знаю) –

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