2012-02-09 4 views
1

В проекте андроида у меня есть функция foo, которая должна выполнять последовательность операций в последовательности. Внутри foo я бы хотел вызвать showDialog, чтобы отобразить диалог и подождать. Затем из showDialog, когда пользователь нажимает на запись, я бы , как диалог, чтобы уведомить() функцию foo, чтобы она продолжалась. Я не хочу, чтобы foo продолжал выполнение до тех пор, пока диалоговое окно не сообщит об этом. До сих пор я придумали, после чего по какой-то причине, кажется, не работает:Android: синхронизация потоков: ожидание закрытия диалогового окна

class FooActivity { 

    synchronized void foo(String param) { 

     try { 

      showDialog(DIALOG_SELECT_FOO); 

      wait(); 

      doNextThing(param); 

     } 

     } catch (Exception e) { } 

    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 

     switch (id) { 

     case DIALOG_SELECT_FOO: 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 

      // ... 

      builder.setItems(items, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       synchronized(FooActivity.this) { 

       FooActivity.this.notify(); 

       } 

      } 

      }); 

      return builder.create(); 

     } 

     // should never get here 

     return null; 

    } 

    } 

В принципе, я не вижу диалог на всех. Я думаю, что это потому, что wait() вызывается до того, как диалог получит шанс запустить. Выполняется ли диалог на тем же потоком, что и вызывающий? Любая идея о том, как исправить этот код?

Спасибо,

Джон Goche

ответ

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