我有以下情况:
我有一个方法可以对用户输入进行一些检查。
该方法返回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;
}
最佳答案
您要做的是阻止主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();
}