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

Xamarin Android(非Forms)如何通过Button Tag传递三个整数数据

解决Xamarin.Android中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:45:36