0

私は現在、Geocoderを使用して都市検索の可能なGeoPointを検索するプログラムを作成しています。次に、ジオポイントを取得してオーバーレイとしてマップに追加すると、ユーザーはオーバーレイをクリックできます。アラートダイアログがポップアップ表示され、これが正しいかどうかを確認できます。

ユーザーが[はい]または[いいえ]をクリックした後、回答を取得できるスイングのようにアラートダイアログを機能させる方法がわかりませんでした。そこで、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への参照です

4

1 に答える 1

0

これは、dialog.show();メソッドがユーザーがダイアログを操作するのを待たずに戻るためです。それはその名前が示唆することを正確に実行し、それ以上のことは何もしません。ダイアログが表示されてから戻ります。つまり、myMessageフィールドは常にnullになり、この条件がtrueになることはありません。

      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 に答える