带返回值的函数使用AlertDialog

时间:2013-02-11 13:01:44

标签: android asynchronous

我从界面覆盖了一个函数(我无法修改),让我们说

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的异步特性,这不起作用。处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您必须仅在以下UI线程上运行此代码:

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

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