我已经编写了一个简单的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报告。