2010-07-20 3 views
6

Utilizzando i seguenti frammenti di codice, sto cercando di ottenere il valore di testo che è stato digitato nel numero EditText.Recupero del valore di EditTexts nel builder AlertDialog mediante Layout

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

mio login.xml è abbastanza standard e dritto in avanti:

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

quando qualcuno clicca il PositiveButton, come faccio ad ottenere il valore dei campi EditText?

risposta

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

Non penso che possiamo chiamare direttamente 'findViewById' come quello nella classe anonima di' OnClickListener'. Devi usare la vista già di riferimento 'loginView'. Si prega di vedere la mia risposta per i dettagli. –

0

io non sono sicuro che si può chiamare direttamente findViewById() come quello nella classe anonima come suggerisce la risposta accettata. Per me dà -

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

Dovete chiamare il View loginView che hai già fatto riferimento a. Inoltre è importante dichiarare loginView come definitivo per fare riferimento ad esso nella classe anonima 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 per il voto negativo per favore? –

+0

Questo è più accettabile se non si utilizza la classe personalizzata per una finestra di dialogo e la creazione di una finestra di dialogo in movimento – Naveen