3

我有以下情况:

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

该方法返回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;
}
4

1 回答 1

2

您尝试做的是阻止主 UI 线程,直到从 click 获得响应OK。不是好主意。

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

无论如何,我会创建应该注意按钮单击的处理程序,例如:

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();           
}
于 2013-10-28T10:58:43.507 回答