我有以下情况:
我有一个方法可以对用户输入进行一些检查。
该方法返回true
或false
。
现在我的方法会弹出一些对话框,如果是这样的话。
我无法返回布尔表单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;
}
答案 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();
}