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: p>
est l'une de ces options possible avec un alertdialog (vs une boîte de dialogue personnalisée)? P>
Je pense que la deuxième option serait la plus simple, mais je suis prêt soit si possible. P>
3 Réponses :
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 } });
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 } } });
Où puis-je obtenir l'ID de dialogue? Pouvez-vous s'il vous plaît fournir un exemple minimal et fonctionnel !?
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) { } });