0

경고 대화 상자의 레이아웃에 포함 된 EditText의 텍스트를 어떻게 얻을 수 있습니까? 여기AlertDialog의 사용자 정의보기에서 EditText에 액세스

코드 :

LayoutInflater li = LayoutInflater.From(this); 
View view = li.Inflate(Resource.Layout.AlertDView1ET1TVhori, null); 
AlertDialog.Builder adb = new AlertDialog.Builder(this); 
adb.SetTitle(GetString(Resource.String.EMPSPSAlertTitleMany)); 
adb.SetView(view); 
EditText adbText = FindViewById<EditText>(Resource.Id.txtADV11Left); 

및 레이아웃 :

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout android:layout_height="wrap_content" 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:id="@+id/widget28"> 
    <EditText android:layout_height="wrap_content" 
      android:layout_width="0dp" 
      android:text="test" 
      android:id="@+id/txtADV11Left" 
      android:layout_weight="5" 
      android:gravity="center"/> 
    <TextView android:layout_height="wrap_content" 
      android:layout_width="0dp" 
      android:id="@+id/lbADV11Right" 
      android:text="Test" 
      android:layout_weight="1" 
      android:gravity="center"/> 
</LinearLayout> 

내 문제는 내가 심지어이 레이아웃에 글고 또는 텍스트 뷰에 액세스하는 방법을 알고하지 않는 것이있다. 마지막 줄의 코드는 아무 것도 찾지 못할 것이며 이후에 adbText가 null이므로 "System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다" 이 표시됩니다.

그리고 레이아웃에 대한 내 이상한 이름에 대해 불평하지 마십시오.

답변

1

활동에 생성/링크 될 때까지 액세스 할 수 없습니다.

대신 당신이 시도 할 수 있습니다 :

EditText adbText = view.FindViewById<EditText>(Resource.Id.txtADV11Left); 
+0

덕분에, 너무 당신에게 완벽하게 – EaranMaleasi

1

난 당신이 흥미 수있는 blog post about Dialogs on Mono for Android을했습니다. Softlion 대답으로, 하나의 방법은 부풀려에서 그것을 찾을 수 있습니다 :

var customView = LayoutInflater.Inflate (Resource.Layout.AlertDView1ET1TVhori, null); 

var builder = new AlertDialog.Builder(this); 
builder.SetView(customView); 
builder.SetPositiveButton(Resource.String.dialog_ok, OkClicked); 
builder.SetNegativeButton(Resource.String.dialog_cancel, CancelClicked); 

//You should be able to access your EditText either here with: 
var editText = customView.FindViewById<EditText>(Resource.Id.txtADV11left); 

또한 지금처럼 EventHandlers에 글고 치기에 액세스 할 수 있습니다

private void OkClicked(object sender, DialogClickEventArgs args) 
{ 
    var dialog = (AlertDialog) sender; 
    var editText = (EditText)dialog.FindViewById(Resource.Id.txtADV11left); 
} 
+0

감사를했다 , 나는 또한 나의 북마크에 당신의 블로그를 추가 할 것이다, 내가 보았던 것이 정말로 흥미있는 것처럼 보였던 것 – EaranMaleasi

관련 문제