在mono-android(C#)中获取编辑文本控件中的用户输入



我已经编写了一个简单的android应用程序来测试c#中的mono-android。我的程序是有一个Edit Text控件(或者纯文本,当我在main.axml文件中创建UI时,它是控件的名称)和一个按钮。用户在编辑文本中键入一些内容并按下按钮,我只想获得用户输入。但我无法通过Text属性访问它。

附带说明:我的主要程序是通过Socket将文本发送到服务器,但当我想获得字符串并将其放入缓冲区时,它总是不返回任何内容。这是我的测试程序:

     protected override void OnCreate(Bundle bundle) {
         base.OnCreate(bundle);
         SetContentView(Resource.Layout.Main);
         EditText input = FindViewById(Resource.Id.editText1);
         Button send = FindViewById<Button>(Resource.Id.button1);
         send.Click += (sender, e) => {             
              string str = input.Text;
         };
     }

这是我实际的套接字程序:

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        EditText iptext = FindViewById<EditText>(Resource.Id.editText1);
        EditText porttext = FindViewById<EditText>(Resource.Id.editText2);
        EditText input = FindViewById<EditText>(Resource.Id.editText3);
        Button send = FindViewById<Button>(Resource.Id.button1);
        send.Click += (sender, e) => {
            *connetpoint = new IPEndPoint(IPAddress.Parse(iptext.Text) ,Convert.ToInt32(porttext.Text));
            sc.Connect(connetpoint);
            sendbuffer = System.Text.Encoding.UTF8.GetBytes(input.Text);
            sc.Send(sendbuffer);
        };
    }

但奇怪的是,*行运行得很好,我在其中获得了另外2个编辑文本输入(服务器的ip和端口)。

我认为您的代码没有问题,无法重新创建您的问题。以下代码在Emulator和设备上都有效:

var button = FindViewById<Button>(Resource.Id.MyButton);
var et1 = FindViewById<EditText>(Resource.Id.editText1);
var et2 = FindViewById<EditText>(Resource.Id.editText2);
var et3 = FindViewById<EditText>(Resource.Id.editText3);
button.Click += (s,e) =>
{
    var text1 = et1.Text;
    var text2 = et2.Text;
    var text3 = et3.Text;
    Toast.MakeText(this, string.Format("T1: {0}, T2: {1}, T3: {2}", text1, text2, text3), ToastLength.Short).Show();
};

您是如何验证EditText中是否真的有值的?它可能是调试器由于某种原因出现了错误,并报告它为空,而实际上并不是空的。在这种情况下,我会向Xamarin报告。

最新更新