2017-07-23 8 views
-2

J'ai besoin de fonctionnalités comme javascript 'confirm (msg)' dans Android. Quelque chose comme AlertDialog, mais avec possibilité de retourner la valeur, pas de rappel. Y a-t-il un moyen de l'implémenter?Y a-t-il quelque chose comme javascript 'confirm (msg)' dans Android?

MISE À JOUR fonctionnalités comme celui-ci ne convient pas à mon problème:

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(); 
    }); 

je besoin de quelque chose comme ceci:

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

Répondre

0

c'est assez sûr de ce que vous cherchez: https://developer.android.com/guide/topics/ui/dialogs.html

+0

Je le sais bien, mais ce n'est pas que j'ai besoin. J'ai mis à jour ma question. – Evgeny

+0

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (// meta.stackoverflow.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. – GhostCat

+0

@GhostCat Je prévoyais de le faire de cette façon, mais je ne peux pas le faire avec la quantité de réputation que j'ai. Si j'étais capable de le faire, il serait sacrément difficile de trouver la boîte que je pourrais appuyer pour le faire de cette façon. Mais encore merci pour le conseil –

0

J'ai déjà résolu mon problème de cette façon:

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; 
    } 
} 

Cela doit être appelé à partir de fils non-ui:

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