2013-02-11 32 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 
     } 
    }); 
}