Xamarin Android中MaterialButton点击事件与EditText数据获取问题
解决方案
1. 绑定按钮点击事件
在OnCreate方法中获取按钮实例后,直接通过C#风格的事件订阅绑定FindTranslator方法,这是Xamarin.Android更简洁的写法:
btn.Click += FindTranslator;
2. 获取输入框数据
为了高效访问输入控件,建议在类中声明全局EditText变量,在OnCreate中初始化后,直接在FindTranslator方法中读取内容:
- 先在
MainActivity类中添加成员变量:
private EditText _hospitalInput; private EditText _durationInput;
- 然后在
OnCreate方法中初始化:
_hospitalInput = FindViewById<EditText>(Resource.Id.editText1); _durationInput = FindViewById<EditText>(Resource.Id.edittime);
- 最后在
FindTranslator方法中读取并处理数据:
public void FindTranslator(object sender, EventArgs e) { string hospitalName = _hospitalInput.Text.Trim(); if (int.TryParse(_durationInput.Text.Trim(), out int durationMinutes)) { Console.WriteLine($"医院:{hospitalName},需求时长:{durationMinutes}分钟"); // 此处添加翻译员查找的业务逻辑 } else { Console.WriteLine("请输入有效的数字时长"); } }
修改后的完整C#代码
namespace Case_Study { [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] public class MainActivity : AppCompatActivity { private EditText _hospitalInput; private EditText _durationInput; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); SetContentView(Resource.Layout.activity_main); // 初始化输入控件 _hospitalInput = FindViewById<EditText>(Resource.Id.editText1); _durationInput = FindViewById<EditText>(Resource.Id.edittime); // 绑定按钮点击事件 var btn = FindViewById<Google.Android.Material.Button.MaterialButton>(Resource.Id.button1); btn.Click += FindTranslator; } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } public void FindTranslator(object sender, EventArgs e) { string hospitalName = _hospitalInput.Text.Trim(); if (int.TryParse(_durationInput.Text.Trim(), out int durationMinutes)) { Console.WriteLine($"按钮已点击 - 医院:{hospitalName},时长:{durationMinutes}分钟"); // 在这里实现翻译员查找逻辑 } else { Console.WriteLine("按钮已点击 - 时长输入无效,请输入数字"); } } } }
关键说明
- 事件绑定:Xamarin.Android支持C#原生事件订阅,比Android原生的
IOnClickListener写法更简洁易读。 - 数据校验:用
int.TryParse处理时长输入,避免非数字内容引发异常。 - 性能优化:将输入控件声明为类成员,避免每次点击都重复调用
FindViewById。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

