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

相关问题