2012-02-09 53 views
1

在一個android項目中,我有一個函數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的

回答