如何获取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为空。
请不要抱怨我的奇怪名称布局。
答案 0 :(得分:1)
在创建/链接到活动之前,您无法访问它。
相反,你可以试试这个:
EditText adbText = view.FindViewById<EditText>(Resource.Id.txtADV11Left);
答案 1 :(得分: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中的EditText,如下所示:
private void OkClicked(object sender, DialogClickEventArgs args)
{
var dialog = (AlertDialog) sender;
var editText = (EditText)dialog.FindViewById(Resource.Id.txtADV11left);
}