我从界面覆盖了一个函数(我无法修改),让我们说
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 :(得分:0)
您必须仅在以下UI线程上运行此代码:
runOnUiThread(new Runnable() {
public void run() {
getResult();
}
});
或
public int getResult(){
runOnUiThread(new Runnable() {
public void run() {
// your code
}
});
}