2012-02-09 163 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的

回答