web-dev-qa-db-fra.com

Android - Dialogue personnalisé - Impossible d'obtenir le texte de EditText

J'ai un problème avec un dialogue personnalisé. 
Mon dialogue se compose de TextView, EditText et d'un bouton "Ok". Après avoir cliqué sur "Ok", le texte du champ EditText doit être extrait et affecté à la variable String "nom" définie dans l'activité. 
Tout semble fonctionner, pas d'erreurs, etc, cependant "text" est toujours une chaîne vide. 
J'ai lu des sujets sur de tels problèmes, mais je ne suis pas vraiment sûr des ajustements que je devrais faire ici. 
Je suis assez nouveau dans la programmation Android, je vous serais donc reconnaissant si quelqu'un pouvait m'expliquer le problème. Merci d'avance.

     final Dialog dialog = new Dialog(MyActivity.this);
     dialog.setContentView(R.layout.custom_dialog);
     dialog.setTitle("Title");

     final View layout = View.inflate(this, R.layout.custom_dialog, null);
     Button button = (Button) dialog.findViewById(R.id.dialog_ok);
     button.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
                EditText edit=(EditText)layout.findViewById(R.id.dialog_edit);
                String text=edit.getText().toString();

                name=text;

                dialog.dismiss();
         }
     });   

     dialog.show();
26
ThunderSS

Vous gonflez une mise en page là où vous n'en avez pas besoin. J'ai corrigé votre code lorsque vous voyez que j'ai supprimé votre ligne où il est gonflé et modifié la ligne où vous essayez de trouver la vue EditText.

final Dialog dialog = new Dialog(MyActivity.this);
 dialog.setContentView(R.layout.custom_dialog);
 dialog.setTitle("Title");

 Button button = (Button) dialog.findViewById(R.id.dialog_ok);
 button.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {

            EditText edit=(EditText)dialog.findViewById(R.id.dialog_edit);
            String text=edit.getText().toString();

            dialog.dismiss();
            name=text;

     }
 });   


dialog.show();
29
matsjoe

Si vous souhaitez gonfler un fichier xml dans la boîte de dialogue pour créer une version personnalisée, vous pouvez utiliser le code suivant qui obtient deux entrées de l'utilisateur

LayoutInflater linf = LayoutInflater.from(this);            
final View inflator = linf.inflate(R.layout.twoinputs, null);
AlertDialog.Builder alert = new AlertDialog.Builder(this); 

alert.setTitle("Tilte"); 
alert.setMessage("Message"); 
alert.setView(inflator); 

final EditText et1 = (EditText) inflator.findViewById(R.id.editText1);
final EditText et2 = (EditText) inflator.findViewById(R.id.editText2);

alert.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
   public void onClick(DialogInterface dialog, int whichButton) 
   { 
          String s1=et1.getText().toString();
          String s2=et2.getText().toString();
          //do operations using s1 and s2 here...
   } 
}); 

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
   public void onClick(DialogInterface dialog, int whichButton) { 
            dialog.cancel(); 
   } 
}); 

alert.show(); 
49
krishna

Une alternative au matsjoe et au krishna (les deux fonctionnent):

builder.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
    //@Override
    public void onClick(DialogInterface dialog, int id) {
      // sign in the user ...

      Dialog dialogObj =Dialog.class.cast(dialog);
      EditText etUsr=(EditText) dialogObj.findViewById(R.id.username_id_value);
      userStr = etUsr.getText().toString();      
    }
  }
  );

Kf

2
K F

J'espère que cela vous aidera.

private void inputFromDialog() {

    final Dialog dialog = new Dialog(SplashActivity.this);
    dialog.setContentView(R.layout.view_dialog);
    dialog.setTitle("Title");
    dialog.setCancelable(false);
    dialog.show();

    Button button = (Button) dialog.findViewById(R.id.continue_BTN);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            EditText inputET=(EditText)dialog.findViewById(R.id.input_ET);


            if (inputET.getText().toString().equals("")){

                inputET.setError("This field is required");

            }else {

                mssid = inputET.getText().toString();
                dialog.cancel();
                Toast.makeText(SplashActivity.this, mssid, Toast.LENGTH_SHORT).show();
            }

        }
    });



}
0
Juboraj Sarker