在我的活动中,我基于sqlite数据动态创建控件。每个项目都有一个按钮,其中包含需要将行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);
};
答案 0 :(得分:1)
主要问题是您要在附加内容中添加 int
:
// 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
}