Tutorial :Retrieving value of EditTexts in AlertDialog builder using Layout



Question:

Using the following code snippets, I'm trying to get the text value which has been typed in to the EditTexts.

LayoutInflater factory = LayoutInflater.from(this);  final View loginView = factory.inflate(R.layout.login, null);    b.setOnClickListener(new OnClickListener() {      public void onClick(View v) {          Dialog d = new AlertDialog.Builder(NewOrder.this)              .setIcon(R.drawable.icon)              .setTitle("Log In")              .setView(loginView)              .setPositiveButton("Log In", new DialogInterface.OnClickListener() {                  public void onClick(DialogInterface dialog, int whichButton) {                      mSpinner = ProgressDialog.show(mContext, "", "Authenticating User...");                      new LoginTask().execute();                  }              })              .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {                  public void onClick(DialogInterface dialog, int whichButton) {                      /* User clicked cancel so do some stuff */                  }              })              .create();          d.show();      }  });  

My login.xml is pretty standard and straight forward:

<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:orientation="vertical">        <TextView          android:id="@+id/username_view"          android:layout_height="wrap_content"          android:layout_width="wrap_content"          android:layout_marginLeft="20dip"          android:layout_marginRight="20dip"          android:text="Email Address"          android:gravity="left"          android:textAppearance="?android:attr/textAppearanceMedium" />        <EditText          android:id="@+id/username"          android:layout_height="wrap_content"          android:layout_width="fill_parent"          android:layout_marginLeft="20dip"          android:layout_marginRight="20dip"          android:scrollHorizontally="true"          android:autoText="false"          android:capitalize="none"          android:gravity="fill_horizontal"          android:textAppearance="?android:attr/textAppearanceMedium" />        <TextView          android:id="@+id/password_view"          android:layout_height="wrap_content"          android:layout_width="wrap_content"          android:layout_marginLeft="20dip"          android:layout_marginRight="20dip"          android:text="Password"          android:gravity="left"          android:textAppearance="?android:attr/textAppearanceMedium" />        <EditText          android:id="@+id/password"          android:layout_height="wrap_content"          android:layout_width="fill_parent"          android:layout_marginLeft="20dip"          android:layout_marginRight="20dip"          android:scrollHorizontally="true"          android:autoText="false"          android:capitalize="none"          android:gravity="fill_horizontal"          android:password="true"          android:textAppearance="?android:attr/textAppearanceMedium" />    </LinearLayout>  

When someone clicks the PositiveButton, how do I get the value of the EditText fields?


Solution:1

.setPositiveButton("Log In", new DialogInterface.OnClickListener() {      public void onClick(DialogInterface dialog, int whichButton) {          mSpinner =  ProgressDialog.show(mContext, "", "Authenticating     User...");            /* == Get EditText Values Example == */          EditText edtext_username=  (EditText) findViewById(R.id.username);          EditText edtext_password=  (EditText) findViewById(R.id.password);            String ValueofUsername = edtext_username.getText().toString();           String ValueofPassword = edtext_password.getText().toString();          /* ========== End Example ========== */            new LoginTask().execute();      }  })  


Solution:2

I am not sure you can directly call findViewById() like that in the anonymous class as the accepted answer suggests. For me it gives -

The method findViewById() is undefined for the type new DialogInterface.OnClickListener(){}  

You have to call on the View loginView that you already have referenced to. Also it is important loginView be declared as final to reference it in anonymous class OnClickListener.

final View loginView = factory.inflate(R.layout.login, null);  // loginView should be declared final  b.setOnClickListener(new OnClickListener() {      public void onClick(View v) {          Dialog d = new AlertDialog.Builder(NewOrder.this)              .setIcon(R.drawable.icon)              .setTitle("Log In")              .setView(loginView)              .setPositiveButton("Log In", new DialogInterface.OnClickListener() {                  public void onClick(DialogInterface dialog, int whichButton) {                     mSpinner = ProgressDialog.show(mContext, "", "Authenticating User...");                     EditText usernameText=  (EditText) loginView.findViewById(R.id.username);                     EditText passwordText=  (EditText) loginView.findViewById(R.id.password);                     new LoginTask().execute();                  }              })              //more code  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »