我有以下情况:
我有一个方法可以对用户输入进行一些检查。
该方法返回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;
}

最佳答案

您要做的是阻止主ui线程,直到单击OK获得响应。
不是个好主意。
您可以在Google groups中找到有关该问题的一些对话,但他们建议的解决方案对于您的目标(您的选择)来说太复杂了。
无论如何,我会创建一个处理按钮点击的处理程序,比如:

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);
        }
    }
};

修改后:
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();
}

10-07 19:22
查看更多