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> 

我的問題是,我甚至不知道如何訪問的EditText或TextView的此佈局。最後一行代碼不會找到任何內容,稍後我會得到一個「System.NullReferenceException:對象引用未設置爲對象實例」 ,因爲adbText爲空。

請不要抱怨我的奇怪的名字佈局東西。

回答

1

在創建/鏈接到活動之前,您無法訪問它。

相反,你可以試試這個:

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

感謝,完美工作 – EaranMaleasi 2013-02-26 13:20:33

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

您也可以訪問的EditText在事件處理像這樣:

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

並感謝你太,我還會將你的博客添加到我的書籤中,我看到的內容似乎非常有趣 – EaranMaleasi 2013-02-26 13:21:11

相關問題