0

我正在从一个接口(我无法修改)覆盖一个函数,比方说

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

4

1 回答 1

0

您必须仅在 UI 线程上运行此代码,例如:

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

或者

    public int getResult(){
       runOnUiThread(new Runnable() {
        public void run() {
            // your code
        }
    });
 }
于 2013-02-11T13:22:44.577 回答