如何从对话框按钮返回布尔值?

时间:2013-10-28 10:51:04

标签: android

我有以下情况:

我有一个方法可以对用户输入进行一些检查。

该方法返回truefalse

现在我的方法会弹出一些对话框,如果是这样的话。

我无法返回布尔表单onClick,因为onClick返回void。

请有人建议我解决方法???

感谢!!!

public Boolean retrunvalue=false;
private Boolean performchecks() {

    if (!reminderdatepicked && !remindertimepicked) {

        AlertDialog.Builder builder = new AlertDialog.Builder(
                NewGenericEvent.this);
        builder.setTitle(R.string.remindernotsettitle);
        builder.setMessage(R.string.remindernotmessage)
        .setPositiveButton(R.string.yes,
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int id) {
                retrunvalue= true;//NOT A GOOD IDEA
                                                      //BECAUSE IT RETURNS TRUE
                                                      //ONLY WHEN performchecks()
                                                      //IS CALLED THE SECOND TIME
            }
        });
        builder.setNegativeButton(R.string.no,
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int id) {
                retrunvalue= false;
            }
        });

        builder.create().show();
        return retrunvalue;
    }


    return true;
}

1 个答案:

答案 0 :(得分:2)

您尝试执行的操作是阻止主UI线程直到获得点击OK的响应。 不太好主意。

您可以在Google groups中找到有关该问题的对话,但他们建议的解决方案对您的目标(您的选择)来说过于复杂。

无论如何我会创建Handler,它应该关注按钮点击,例如:

protected static final int DIALOG_CLICKED = 1;

private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        String txt;
        switch (msg.what) {
        case DIALOG_CLICKED:
            Boolean bool = Boolean.parseBoolean(msg.obj.toString());
            // When user press on "OK",
            // your braking point goes here
            break;
        default:
            super.handleMessage(msg);
        }
    }
};

修改performchecks后:

private void performchecks() {

        AlertDialog.Builder builder = new AlertDialog.Builder(
                this);
        builder.setTitle(R.string.remindernotsettitle);
        builder.setMessage(R.string.remindernotmessage)
        .setPositiveButton(R.string.yes,
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int id) {

                mHandler.sendMessage(mHandler.obtainMessage(DIALOG_CLICKED, true)); 
            }
        });
        builder.setNegativeButton(R.string.no,
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int id) {
                mHandler.sendMessage(mHandler.obtainMessage(DIALOG_CLICKED, false)); 
            }
        });

        builder.create().show();           
}