ThunderSS
ThunderSS

Reputation: 443

Android - Custom Dialog - Can't get text from EditText

I have a problem with a custom dialog.
My dialog consists of a TextView, EditText and an "Ok" Button. After clicking "Ok", it should get the text from EditText field and assign it to the String variable "name" defined in the Activity.
Everything seems to work, no errors etc, however "text" is always an empty String.
I read some topics about such problems, however I'm not really sure what adjustments I should make here.
I'm quite new to Android programming, so I'd be grateful if somebody could explain the problem to me. Thanks in advance.

     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();

Upvotes: 30

Views: 57378

Answers (6)

Andrey
Andrey

Reputation: 722

Like @krishna but in kotlin

  val builder = AlertDialog.Builder(context)
    val inflater = requireActivity().layoutInflater

    val dialogView = inflater.inflate(R.layout.fav_dialog, null)
    val name = dialogView.findViewById<EditText>(R.id.username)

    builder.setView(dialogView)
        .setPositiveButton("Add") { dialog, id ->
            val foxName = name.text.toString()
            Log.v("miapp", "Myfox $foxName")
        }
        .setNegativeButton("Cancel") { dialog, id ->
            dialog.cancel()
        }

    builder.setTitle("Add to favs")
    builder.setCancelable(false).create().show()

Upvotes: 0

Juboraj Sarker
Juboraj Sarker

Reputation: 957

Hope it will help you.

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();
            }

        }
    });



}

Upvotes: 0

K F
K F

Reputation: 1546

An alternative to matsjoe and to krishna (both work):

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

Upvotes: 2

krishna
krishna

Reputation: 4099

If you want to inflate a xml file into dialog box for creating custom version you can use the following code which gets two input from user

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(); 

Upvotes: 58

Soheil
Soheil

Reputation: 753

EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();

http://developer.android.com/training/basics/firstapp/starting-activity.html

Upvotes: -11

matsjoe
matsjoe

Reputation: 1480

You are inflating a layout where it is not needed. I fixed your code as you see I removed your line where it inflates and changed the line where you try to find the EditText view.

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();

Upvotes: 30

Related Questions