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);
};
主要问题是您正在添加 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
}