2013-05-24 5 views
0

Я пытаюсь получить ввод от другого метода, а затем использовать этот вход после этого, но приложение не ждет ввода.Как сделать приложение ждать ввода

Код, который я бегу это

case (R.id.menuSort): 
     sSort = sortPopup(); 
     layout.removeAllViews();       
     arrlst.clear(); 
     checkLogs(); 

где sortPopup это метод, который создает диалоговое окно и возвращает строку. Когда я нажимаю кнопку, функция removeAllViews, clear и checkLogs запускается до того, как я выберу параметр из диалогового окна.

Я пытался использовать wait и уведомлять, но даже после прочтения нескольких тем с подобной проблемой я не могу достичь своей цели без сбоя программы.

Есть ли способ предотвратить запуск 3 функций до достижения результата методом sortPopup?

Код onPopup выглядит следующим образом

public String sortPopup() { 
    initializePopup(arrsSort); 
    new AlertDialog.Builder(this).setTitle("Select Sort") 
      .setAdapter(adapter, new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        if (arrsSort[which] == "Ascending") { 
         sChoice = "ASC"; 
        } else { 
         sChoice = "DESC"; 
        } 

       } 
      }).create().show(); 

    return sChoice; 
} 

ответ

0

Вы можете изменить свой код так:

public void sortPopup() { 
    initializePopup(arrsSort); 
    new AlertDialog.Builder(this).setTitle("Select Sort") 
      .setAdapter(adapter, new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        if (arrsSort[which] == "Ascending") { 
         sChoice = "ASC"; 
        } else { 
         sChoice = "DESC"; 
        } 

        layout.removeAllViews(); 
        arrlst.clear(); 
        checkLogs(); 
       } 
      }).create().show(); 
     //You cant try call checkLogs() here 
} 

Таким образом, код не нужны никакие ожидания ...

+0

Метод с диалогом отличается от другого. Как я могу использовать прослушиватель onDismiss для диалога в другом методе? – Dzinic

+0

Это зависит от того, как вы создали диалог ... Добавьте код sortPopUp, и я вижу, что я могу сделать;) –

+0

Плохая идея запускать код в методе 'onDismiss', потому что диалог можно отклонить не только нажатием кнопки ' Ok ', но также нажав «Отмена» и во время изменений конфигурации (например, ориентация экрана). См. Мой ответ ниже. – makovkastar

0

You могут создавать и показывать диалог следующим образом:

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); 
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // Call your methods that wait for dialog input. 
    } 
}); 
AlertDialog dialog = builder.create(); 
dialog.show(); 
Смежные вопросы