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. P>
Jusqu'à présent, j'ai: P> 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. P> merci p> p>
6 Réponses :
Je pense que vous devriez recréer la boîte de dialogue code> (code>, comme il semble que le J'ai aussi quelques conseils pour vous: P> Essayez d'utiliser 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 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>.
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>
alertdialog.builder () code> objet, vous pouvez simplement FAIRE: P>
Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show();
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; }
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,
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(); }
// 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);
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(); }