2012-02-09 3 views
1

안드로이드 프로젝트에서 나는 시퀀스를 수행해야하는 foo 함수가 있습니다. foo 내부에서 showDialog를 호출하여 대화 상자를 표시하고 기다리고 싶습니다. 그런 다음 showDialog에서 사용자가 항목을 클릭 할 때 foo 함수에 통보 할 대화 상자처럼 이 표시되어 계속 진행될 수 있습니다. do not do foo가 대화 상자에서 그렇게 지시 할 때까지 실행을 계속하기를 원합니다.안드로이드 : 스레드 동기화 : 대화가 닫히기를 기다리는 중

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; 

    } 

    } 

는 기본적으로, 나는 전혀 대화 상자가 표시되지 오전 : 지금까지 나는 어떤 이유로 작동하지 않는 것 다음으로 올라와있다. Dial()이 실행되기 전에 wait()가 호출되어 이 호출되기 때문입니다. 다이얼로그가 발신자와 동일한 스레드 인 에서 실행됩니까? 이 코드를 수정하는 방법에 대한 아이디어가 있습니까?

감사합니다,

존 Goche

답변