2010-07-20 14 views
6

À l'aide des extraits de code suivants, j'essaie d'obtenir la valeur de texte qui a été tapée dans EditText s.Récupération de la valeur de EditTexts dans le générateur AlertDialog à l'aide de la disposition

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

Mon login.xml est assez standard et simple:

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

Quand quelqu'un clique sur le PositiveButton, comment puis-je obtenir la valeur des champs EditText?

Répondre

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

Je ne pense pas que nous puissions appeler directement 'findViewById' comme ça dans la classe anonyme OnClickListener. Vous devez utiliser la vue de référence 'loginView'. S'il vous plaît voir ma réponse pour plus de détails. –

0

Je ne suis pas sûr que vous pouvez appeler directement findViewById() comme ça dans la classe anonyme comme la réponse acceptée suggère. Pour moi, il donne -

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

Vous devez appeler le View loginView que vous avez déjà fait référence à. Il est également important que loginView soit déclaré comme final pour le référencer dans la classe anonyme 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

Raison pour le vote vers le bas s'il vous plaît? –

+0

Ceci est plus acceptable si vous n'utilisez pas de classe personnalisée pour une boîte de dialogue et de création de boîte de dialogue lors de vos déplacements. – Naveen