9
votes

Validation de la boîte de dialogue

J'utilise un alertdialog très simple, juste une vue personnalisée avec une zone de texte et le bouton Soumettre AlertDialog positif. Je souhaite valider que la zone de texte a eu du texte saisi avant que l'utilisateur rejette la boîte de dialogue. Je vois deux possibilités, avec des questions sur chacun:

  • désactiver le bouton d'envoi jusqu'à la la zone de texte n'est pas vide (dans certains ONCHANGE () Type de Type pour le texte boîte)
    • Comment savez-vous lorsque le contenu de la zone de texte change?
    • Comment obtenez-vous une référence à l'objet Button AlertDialog?
    • vérifier le bouton d'envoi onclick () et annuler le renvoi de la boîte de dialogue si c'est vide.
      • est-il possible de le faire avec un bouton d'alertdialog? Le dialogue renvoie sans appeler manuellement rejeter () ou annuler (), donc je ne suis pas sûr ...

        est l'une de ces options possible avec un alertdialog (vs une boîte de dialogue personnalisée)?

        Je pense que la deuxième option serait la plus simple, mais je suis prêt soit si possible.


0 commentaires

3 Réponses :


4
votes

La manière la plus simple, je pense que c'est défini votre propre boîte de dialogue dans un fichier XML. Ensuite, vous pouvez l'afficher très simple (dans cet exemple quelque part dans la classe d'activité):

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.your_dialog_file);

Button yourButton = dialog.findViewById(R.id.yourButton);
final EditText text = dialog.findViewById(R.id.yourTextEdit);
yourButton.setOnClickListener( {

public void onClick(View view) {
   if ( ! (text.getText().toString.equals(""))) {
        //go on here and dismiss dialog
   }

});


0 commentaires

1
votes

Voici un moyen de valider l'entrée et de conserver une boîte de dialogue d'alerte à l'écran si l'entrée n'est pas valide. En réalité, il supprime la boîte de dialogue et en fait une nouvelle copie.

Dans la fonction ONCLICK de votre SETPostiveButton, faites votre validation. Si les choses ne sont pas comme elles devraient être, montrez à l'utilisateur un toast. Appelez ensuite l'essuyer sur votre boîte de dialogue. Ensuite, il s'agit de la partie délicate, appelez asynchroneusement Showdialog sur votre boîte de dialogue (avec ARGS, le cas échéant). De plus: Pour ne pas perdre l'entrée de l'utilisateur, vous devez mettre les valeurs qu'ils ont saisies dans le paquet que vous appelez la boîte de dialogue avec. Et bien sûr, votre code de configuration pour la boîte de dialogue doit rechercher ces valeurs dans le paquet et prépopuler les champs de dialogue de manière appropriée. P>

Donc, votre code ressemblerait à ce que ceci: P>

alert.setPositiveButton(id,
new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) 
    {
    if ((your validation conditions)) {
        // validation conditions not satisfied
        removeDialog(myDialogId);
        Toast.makeText(blah blah).show();
        // now create a new args bundle for the dialog
        Bundle newArgs = new Bundle();
        // now copy whatever you need from the args used to invoke to dialog
        newArgs.putIntegerArrayList("items", myList);
        // now save the user's input in a bundle
        newArgs.putString("dialogToFieldContent", toString);
        final Bundle finalArgs = newArgs;
        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
            showDialog(myDialogId, finalArgs);
            }
        });
    }
    else {
        // if everything is ok
    }
    }
});


1 commentaires

Où puis-je obtenir l'ID de dialogue? Pouvez-vous s'il vous plaît fournir un exemple minimal et fonctionnel !?



8
votes

I Définissez un TextWatcher sur un champ de saisie, puis activez le bouton positif lorsque les conditions de validation sont remplies. Je désactive le bouton positif par défaut par défaut.

AlertDialog.Builder builder = new AlertDialog.Builder(getSherlockActivity());
final View dialogView = LayoutInflater.from(getSherlockActivity()).inflate(R.layout.create_playlist, null);
final EditText inputField = (EditText) dialogView.findViewById(R.id.edit_newPlaylistName);
... //proceed to setup dialog using builder
final AlertDialog alertDialog = builder.show();
alertDialog.setCanceledOnTouchOutside(true);
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setEnabled(false);
inputField.addTextChangedListener(new TextWatcher() {
    @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // my validation condition
        if (inputField.getText().length() > 0) {
           button.setEnabled(true);
        } else {
           button.setEnabled(false);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});


0 commentaires