Xamarin Android(非Forms)如何通过Button Tag传递三个整数数据
因为Xamarin.Android里Button.Tag要求值必须是Java.Lang.Object的子类,直接用.NET普通数组会因为类型不兼容导致无法直接读取,下面提供三种可行的解决方式:
方案1:自定义Java兼容类封装数据
自定义一个继承自Java.Lang.Object的类,专门用来存储需要传递的三个整数:
// 自定义类,必须继承Java.Lang.Object才能作为Tag的值 public class ButtonData : Java.Lang.Object { public int Num1 { get; set; } public int Num2 { get; set; } public int Num3 { get; set; } public ButtonData(int num1, int num2, int num3) { Num1 = num1; Num2 = num2; Num3 = num3; } }
设置Button的Tag:
Button button = new Button(this); button.Text = "Test Button"; button.SetBackgroundColor(Android.Graphics.Color.Black); button.SetTextColor(Android.Graphics.Color.White); // 传入三个整数实例化自定义类 button.Tag = new ButtonData(10, 20, 30); button.Click += ClickEvent;
事件处理中读取数据:
public void ClickEvent(object sender, EventArgs e) { Android.Widget.Button button = (Android.Widget.Button)sender; // 强转为自定义的ButtonData类型 var data = (ButtonData)button.Tag; // 直接读取三个整数 int num1 = data.Num1; int num2 = data.Num2; int num3 = data.Num3; }
方案2:使用Bundle存储多组整数
利用Android自带的Bundle类(本身属于Java.Lang.Object子类),通过键值对存储多个整数:
设置Tag的代码:
Button button = new Button(this); button.Text = "Test Button"; button.SetBackgroundColor(Android.Graphics.Color.Black); button.SetTextColor(Android.Graphics.Color.White); Bundle bundle = new Bundle(); bundle.PutInt("Num1", 10); bundle.PutInt("Num2", 20); bundle.PutInt("Num3", 30); button.Tag = bundle; button.Click += ClickEvent;
事件处理中读取:
public void ClickEvent(object sender, EventArgs e) { Android.Widget.Button button = (Android.Widget.Button)sender; Bundle bundle = (Bundle)button.Tag; // 通过键名读取对应整数 int num1 = bundle.GetInt("Num1"); int num2 = bundle.GetInt("Num2"); int num3 = bundle.GetInt("Num3"); }
方案3:使用Java整数数组
直接使用Java.Lang.Integer数组(属于Java对象数组,符合Tag的类型要求):
设置Tag的代码:
Button button = new Button(this); button.Text = "Test Button"; button.SetBackgroundColor(Android.Graphics.Color.Black); button.SetTextColor(Android.Graphics.Color.White); // 创建Java整数数组 Java.Lang.Integer[] nums = new Java.Lang.Integer[] { 10, 20, 30 }; button.Tag = nums; button.Click += ClickEvent;
事件处理中读取:
public void ClickEvent(object sender, EventArgs e) { Android.Widget.Button button = (Android.Widget.Button)sender; Java.Lang.Integer[] nums = (Java.Lang.Integer[])button.Tag; // 直接通过索引读取整数 int num1 = nums[0]; int num2 = nums[1]; int num3 = nums[2]; }
内容的提问来源于stack exchange,提问作者markdem
相关产品推荐
相关产品推荐

