2010-07-20 5 views
6

Usando los siguientes fragmentos de código, estoy tratando de obtener el valor de texto que se ha escrito en el EditText s.Recuperando el valor de EditTexts en el constructor AlertDialog usando Diseño

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

Mi login.xml es bastante estándar y sencillo:

<?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> 

Cuando alguien hace clic en el PositiveButton, ¿cómo consigo el valor de los campos EditText?

Respuesta

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

No creo que podamos llamar directamente a 'findViewById' así en la clase anónima' OnClickListener'. Tienes que usar la vista de referencia 'loginView'. Por favor, mira mi respuesta para más detalles. –

0

no estoy seguro de que usted puede llamar directamente findViewById() como el de la clase anónima como la respuesta aceptada sugiere. Para mí da -

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

Tienes que llamar a la View loginView que ya se ha referido a. También es importante declarar loginView como final para referenciarlo en la clase anónima 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 
+0

Motivo del voto negativo, por favor? –

+0

Esto es más aceptable si no está utilizando una clase personalizada para un cuadro de diálogo y creando un cuadro de diálogo sobre la marcha – Naveen

Cuestiones relacionadas