2017-07-23 79 views
-2

我需要在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
+0

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

+0

雖然這可能在理論上回答這個問題,[這將是更可取的](/ meta.stackoverflow.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – GhostCat

+0

@GhostCat我打算這樣做,但我無法做到這一點與我擁有的聲譽。如果我能夠這樣做,那麼很難找到我可以按這樣做的方框。但是,再次感謝您的提示 –

0

我已經用這種方式解決了我的問題:

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); 
相關問題