Xamarin将数据从动态创建的按钮传递到活动

本文关键字:按钮 活动 创建 数据 动态 Xamarin | 更新日期: 2023-09-27 18:11:29

在我的活动中,我动态地创建基于sqlite数据的控件。每个项目都有一个带有click事件的按钮,该按钮需要将行ID发送给新活动。

我已经看了下面的页面,可以得到这个工作在一个按钮,已经存在于我的布局。但当按钮是动态创建时,它似乎不起作用。是否有一些额外的我需要做这个工作的按钮?https://developer.xamarin.com/recipes/android/fundamentals/activity/pass_data_between_activity/

下面是动态创建按钮的代码:
foreach (Tasks item in table)
{
    TableRow row = new TableRow(this);
    TextView txtTask = new TextView(this);
    txtTask.Text = item.Name;
    row.AddView(txtTask);
    tableLayout.AddView(row);
    row = new TableRow(this);
    Button btnEdit = new Button(this);
    btnEdit.Text = "Edit Record";
    btnEdit.SetWidth(300);
    btnEdit.Click += delegate 
    {
        Intent viewTask = new Intent(this, typeof(UpdateTaskActivity));
        viewTask.PutExtra("TaskId", item.Id);
        StartActivity(viewTask);
    };
    row.AddView(btnEdit);
    tableLayout.AddView(row);
}

在UpdateTaskActivity的OnCreate方法我有:

string test = Intent.GetStringExtra("TaskId") ?? "error";
if (test != "error")
{
    //Do Stuff
}

但是当我设置断点时,我的字符串总是空的。我放了一个断点,以确保正确的ID被提取。

为什么这个工作与一个内置的按钮,但不与我的动态一个?

只是为了避免混淆,在我的启动屏幕上,我有一个测试按钮,我的主要活动有以下代码用于该按钮。这段代码运行良好,因为按钮不是动态创建的:

//Test button
Button btnTest = FindViewById<Button>(Resource.Id.btnTest);
btnTest.Click += delegate 
{
    var activity2 = new Intent(this, typeof(UpdateTaskActivity));
    activity2.PutExtra("TaskId", "1");
    StartActivity(activity2);
};

Xamarin将数据从动态创建的按钮传递到活动

主要问题是您正在添加 int 到extra:

// item.Id is an int type
viewTask.PutExtra("TaskId", item.Id);

然后你试图得到它作为 string :

var test = Intent.GetStringExtra("TaskId");

有两种方法可以获得值,而不必将值作为字符串添加。获取int值:

var test = Intent.GetIntExtra("TaskId", 0);
if (test != 0)
{
    // Do Stuff
}

或者,如果你不想依赖默认值,你可以先检查额外的值:

if (Intent.HasExtra("TaskId"))
{
    var test = Intent.GetIntExtra("TaskId", 0);
    // Do Stuff
}