2010-07-20 1 views
6

다음 코드 단편을 사용하여 EditText에 입력 된 텍스트 값을 가져 오려고합니다.레이아웃을 사용하여 AlertDialog 빌더에서 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(); 
    } 
}); 

login.xml 곧장 앞으로 꽤 표준이며 :

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

누군가가 PositiveButton 클릭하면, 나는 EditText 필드의 값을 얻는 방법?

답변

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

'OnClickListener' 익명 클래스 에서처럼 findViewById를 직접 호출 할 수 있다고 생각하지 않습니다. 이미 참조 뷰'loginView'를 사용해야합니다. 자세한 내용은 내 대답을 참조하십시오. –

0

허용되는 대답에서와 같이 익명 사용자 등급의 전화 번호부와 같은 findViewById()을 직접 호출 할 수 있는지 확신하지 못합니다. 나를 위해 -

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

당신은 이미 참조한 View loginView에 전화해야합니다. 또한 loginView은 익명 클래스 OnClickListener에서 참조하도록 final로 선언해야합니다.

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

아래 투표 이유는 무엇입니까? –

+0

대화 상자에 대한 사용자 정의 클래스를 사용하지 않고 이동 중에도 대화 상자를 만드는 경우에 더 적합합니다 – Naveen