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にアクセスする方法さえ知らないということです。コードの最後の行は何も見つかりません。adbTextがnullであるため、後で「System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。

レイアウトの私の奇妙な名前について文句を言わないでください。

4

2 に答える 2

1

Dialogs on Mono for Android に関するブログ投稿を作成しました。興味深いと思われるかもしれません。Softlion が答えたように、1 つの方法は、膨張したビューからそれを見つけることです。

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 に答える
1

アクティビティに作成/リンクされるまで、アクセスできません。

代わりにこれを試すことができます:

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