7
votes

Null Validation sur la boîte de dialogue d'alerte d'Alert - Android

J'essaie d'ajouter une certaine validation de texte à un champ d'édition de texte situé dans une boîte de dialogue d'alerte. Il incite un utilisateur à entrer dans un nom.

Je veux ajouter une certaine validation de sorte que si ce qu'ils sont entrés est vide ou null, il ne fait rien d'être mis à part de créer un toast disant une erreur.

Jusqu'à présent, j'ai: xxx

mais cela ferme simplement la boîte de dialogue d'alerte, puis affiche le toast. Je veux que la boîte de dialogue d'alerte soit toujours à l'écran.

merci


0 commentaires

6 Réponses :


4
votes

Je pense que vous devriez recréer la boîte de dialogue code> (code>, comme il semble que le DialoginTorface code> donné sous forme de paramètre dans onclick () code> ne vous donne pas Une option d'arrêt de la fermeture de la boîte de dialogue code>.

J'ai aussi quelques conseils pour vous: P>

Essayez d'utiliser Activity.OncreateAdifier () Code >, activité.onpreparadialog () code> et bien sûr activité.showdialog () code>. Ils effectuent une utilisation de dialogue beaucoup plus facile (au moins pour moi), l'utilisation de la boîte de dialogue ressemble également plus à l'utilisation du menu. Utilisation de ces méthodes, vous serez également capable de montrer plus facilement la boîte de dialogue. P>

Je veux vous donner un pourboire. Ce n'est pas une réponse à votre question, mais cela fait cela dans une réponse est beaucoup plus lisible. P>

au lieu de détenir une référence à un alertdialog.builder () code> objet, vous pouvez simplement FAIRE: P>

Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show();


0 commentaires

3
votes

Ce que vous devriez faire est de créer une mise en page XML personnalisée comprenant une zone de texte et un bouton OK au lieu d'utiliser .SetPositiveButton. Ensuite, vous pouvez ajouter un écouteur Cliquez sur votre bouton afin de valider les données et de rejeter la boîte de dialogue.

Il doit être utilisé dans CarediAlog: P>

protected Dialog onCreateDialog(int id) 
{
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if (id==EDIT_DIALOG)
{
            final View layout = inflater.inflate(R.layout.edit_dialog, (ViewGroup) findViewById(R.id.Layout_Edit));

            final Button okButton=(Button) layout.findViewById(R.id.Button_OkTrack);
            final EditText name=(EditText) layout.findViewById(R.id.EditText_Name);
            okButton.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View v) {
                    String textString = trackName.getText().toString(); 
                    if (textString != null && textString.trim().length() ==0)
                    {
                        Toast.makeText(getApplicationContext(), "Please enter...", Toast.LENGTH_LONG).show();
                    } else
                        removeDialog(DIALOG_EDITTRACK);
                }
            });            
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setView(layout);
            builder.setTitle("Edit text");

            AlertDialog submitDialog = builder.create();            
            return submitDialog;
}


0 commentaires

4
votes

Je fais une nouvelle méthode à l'intérieur de ma classe qui affiche l'alerte et mettez tout le code pour créer l'alerte dans cette méthode. Ensuite, après avoir appelé le toast, j'appelle cette méthode. Dis que j'ai nommé cette méthode Creetealert (), alors j'ai, xxx


0 commentaires

0
votes

Utilisez ce code pour afficher la boîte de dialogue.

 public void onClick(DialogInterface dialog, int whichButton) {

            String textSt`enter code here`ring = trackName.getText().toString(); // Converts the value of getText to a string.
            if (textString != null && textString.trim().length() ==0)
            {       
                Context context = getApplicationContext();
                CharSequence error = "Please enter a track name" + textString;
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, error, duration);
                toast.show();

                new AlertDialog.Builder(this)
                .setTitle("Message")
                .setMessage("please enter valid field")
                .setPositiveButton("OK", null).show();            
            }


0 commentaires

0
votes

// Si la vue n'est pas instanciée, elle renvoie toujours null pour les valeurs EditText.

View v = inflater.inflate(R.layout.new_location_dialog, null);
builder.setView(v); 



final EditText titleBox = (EditText)v.findViewById(R.id.title);
final EditText descriptionBox = (EditText)v.findViewById(R.id.description); 


0 commentaires

2
votes

Même si c'est un ancien poste, le code ci-dessous aidera quelqu'un. J'ai utilisé une structure personnalisée et une classe de dialogue étendue.

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Get the layout inflater
    LayoutInflater inflater = requireActivity().getLayoutInflater();

    final View view = inflater.inflate(R.layout.Name_of_the_customized_layout, null);

    final EditText etxtChamp = view.findViewById(R.id.editText);


    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Enter a Name")
            .setTitle("Mandatory field ex.");

    builder.setView(view);

    final Button btnOk = view.findViewById(R.id.ok);
    final Button btnCancel = view.findViewById(R.id.cancel);

    btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(etxtChamp.getText().toString().isEmpty()){
                etxtChamp.setError("Oups! ce champ est obligatoire!");
            }else{
                //Get the editText content and do whatever you want
                String messageEditText = etxtChamp.getText().toString();

                dismiss();
            }
        }
    });

    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
        }
    });

    return builder.create();
}


0 commentaires