0

如何获取 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 为空。

请不要抱怨我奇怪的布局名称。

4

2 回答 2

1

在创建/链接到活动之前,您无法访问它。

相反,你可以试试这个:

EditText adbText = view.FindViewById<EditText>(Resource.Id.txtADV11Left);
于 2013-02-26T11:52:37.237 回答
1

我已经发表了一篇关于 Android Mono 上的 Dialogs的博文,您可能会觉得这很有趣。正如 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);
}
于 2013-02-26T12:49:10.927 回答