在Android中有没有类似javascript'confirm(msg)'的东西?

问题描述:

我需要在Android中使用javascript'confirm(msg)'功能。 有点像AlertDialog,但有可能返回值,而不是回调。 有什么办法可以实现这个吗?在Android中有没有类似javascript'confirm(msg)'的东西?

UPDATE这样 功能不适合我的问题:

builder.setPositiveButton("Yes", new OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     method1(); 
    }); 
builder.setNegativeButton("No", new OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     method2(); 
    }); 

我需要的是这样的:

if (confirmDialog.askConfirm()) { 
    method1(); 
} else { 
    method2(); 
} 

+0

我知道得很好,但它不是我需要的。我更新了我的问题。 – Evgeny

+0

虽然这可能在理论上回答这个问题,[这将是更可取的](/ meta.*.com/q/8259)在这里包括答案的基本部分,并提供参考链接。 – GhostCat

+0

@GhostCat我打算这样做,但我无法做到这一点与我拥有的声誉。如果我能够这样做,那么很难找到我可以按这样做的方框。但是,再次感谢您的提示 –

我已经用这种方式解决了我的问题:

public class JSStyleConfirmDialog { 
    private volatile boolean interrupted = false; 
    private volatile boolean result; 
    private volatile boolean resultObtained = false; 

    public static final int YES = 1; 
    public static final int NO = 0; 
    public static final int ERROR = -1; 

    public int askConfirm(final ClientActivity activity, final String msg) { 
     Thread thread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        while (!resultObtained) { 
         Thread.sleep(20); 
        } 
       } catch (InterruptedException e) { 
        interrupted = true; 
       } 
      } 
     }; 
     thread.start(); 

     new Handler(Looper.getMainLooper()).post(new Runnable() { 
      @Override 
      public void run() { 
       AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
       builder.setMessage(msg); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         result = true; 
         resultObtained = true; 
        } 
       }); 
       builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         result = false; 
         resultObtained = true; 
        } 
       }); 
       AlertDialog dialog = builder.create(); 
       dialog.show(); 
      } 
     }); 


     try { 
      thread.join(); 
     } catch (InterruptedException e) { 
      return ERROR; 
     } 

     if (interrupted) { 
      return ERROR; 
     } 

     return result?YES:NO; 
    } 
} 

这必须从非UI线程调用:

int result = new JSStyleConfirmDialog().askConfirm(activity, msg);