我目前正在编写一个程序,该程序将使用Geocoder搜索城市搜索的可能GeoPoints。然后我获取地理位置并将其作为叠加层添加到地图中,然后用户可以单击叠加层,然后会弹出一个警告对话框,询问他/她是否确定这是正确的。
我无法找到让警报对话框像swing一样工作的方法,在用户单击是或否之后,我可以检索答案。所以我像这样扩展了AlertDialog.Builder类,它也恰好是一个Dialog.OnClicklistener
public class MyAlertDialog extends AlertDialog.Builder implements DialogInterface.OnClickListener{
final static int positiveMessage = 1;
final static int negativeMessage = 0;
final static int neutralMessage = -1;
private int myMessage;
public MyAlertDialog(Context activity) {
super(activity);
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == dialog.BUTTON_POSITIVE){
myMessage = positiveMessage;
}
else if(which == dialog.BUTTON_NEGATIVE){
myMessage = negativeMessage;
}
else{
myMessage = neutralMessage;
}
}
public int getMessage() {
return myMessage;
}
我实现它就像这样
protected boolean onTap(int index) {
OverlayItem item = overlays.get(index);
MyAlertDialog dialog = new MyAlertDialog(ctx);
dialog.setTitle(item.getTitle());
dialog.setMessage("Is this the " + item.getTitle()
+ " you're looking for?");
dialog.setPositiveButton("Yes",null);
dialog.setNegativeButton("Cancel", null);
dialog.show();
if(dialog.getMessage()== MyAlertDialog.positiveMessage){
//do some stuff
但由于某种原因,对话框在方法返回之后才会显示,因此它永远不会完成。有人有主意吗?哦,ctx是对mapActivity的引用
答案 0 :(得分:0)
这是因为dialog.show();
方法不会等待用户在返回之前与Dialog交互。它完全符合名称所暗示的内容,仅此而已;它显示对话框,然后返回。因此,这意味着您的myMessage字段将始终为null,并且此条件永远不会成立:
if(dialog.getMessage()== MyAlertDialog.positiveMessage){
您应该做的是传递OnClickListener以获取正面和负面按钮,并在相应的OnClickListener中执行您需要的任何操作。您甚至不需要创建AlertDialog.Builder的子类,因为这样做没有任何好处。这是看起来的样子:
dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
// Do some positive stuff here!
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
// Do some negative stuff here!
}
});