You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:57:18