2013-02-11 65 views
0

我從一個接口(我不能修改)覆蓋的功能,比方說功能的返回值使用AlertDialog

public abstract int getResult(); 

在此功能,我想問的用戶是什麼結果應該是,使用AlertDialog。所以我的實現應該是這樣的:

public int getResult() { 
    int result; 

    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      switch (which){ 
      case DialogInterface.BUTTON_POSITIVE: 
       result = 1; 
       break; 

      case DialogInterface.BUTTON_NEGATIVE: 
       result = 2; 
       break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("What is the result?").setPositiveButton("1", dialogClickListener) 
     .setNegativeButton("2", dialogClickListener).show(); 

    return result; 
} 

顯然,這是行不通的,由於AlertDialog的異步特性。處理這種情況的正確方法是什麼?

回答

0

你只能像UI線程運行這段代碼:

runOnUiThread(new Runnable() { 
     public void run() { 
      getResult(); 
     } 
    }); 

public int getResult(){ 
     runOnUiThread(new Runnable() { 
     public void run() { 
      // your code 
     } 
    }); 
}