0

I'm currently writing a program that will use the Geocoder to search for possible GeoPoints of a city search. I then take the geopoints and add it to a map as overlays, the user can then click the overlay, and an alert dialog will pop up to ask if he/she is sure that this is the right one.

I couldn't figure out a way to get the alert dialog to work like swing where after the user clicks yes or no, I can retrieve the answer. So I extended the AlertDialog.Builder class like so, which also happens to be a 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;
}

and I implement it like so

    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

But for some reason the dialog wont show until after the method has returned, so it never does the stuff. Anyone have any ideas? Oh and ctx is a reference to my mapActivity

4

1 回答 1

0

这是因为该dialog.show();方法在返回之前不会等待用户与 Dialog 交互。它的功能与名称所暗示的完全一样,仅此而已;它显示对话框,然后返回。因此,这意味着您的 myMessage 字段将始终为空,并且此条件永远不会为真:

      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!
    }
});
于 2012-12-11T00:36:03.483 回答