私の活動では、sqliteデータに基づいてコントロールを動的に作成しています。各アイテムには、その行IDを新しいアクティビティに送信する必要のあるクリックイベントのボタンがあります。Xamarinは動的に作成されたボタンからデータをアクティビティに渡します
私は次のページを見てきましたが、これは私のレイアウトに既に存在するボタンで動作するようになっています。しかし、ボタンが動的に作成されても機能しないようです。これが機能するためにボタンで何か追加する必要がありますか?ここで https://developer.xamarin.com/recipes/android/fundamentals/activity/pass_data_between_activity/
動的にボタンを作成するコードです:私が持っているUpdateTaskActivityのOnCreateの方法で
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);
}
:
string test = Intent.GetStringExtra("TaskId") ?? "error";
if (test != "error")
{
//Do Stuff
}
しかし、私がダウンしてブレークポイントを置くとき、私の文字列があります常にnullです。私は正しいIDが引かれていることを確認するためにブレークポイントを設定しました。
なぜ組み込みボタンで動作しますが、私の動的なボタンでは機能しませんか?
ちょうど混乱を避けるために、スタートアップ画面にはテストボタンがあり、メインアクティビティにはそのボタンの次のコードがあります。ボタンがdymaically作成されていないので、このコードは、正常に動作します:
//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);
};
は 'Tasks''上Id'ですint型の値を取得するのいずれか'string'型? – pnavk
現在intです。 – jpaugh78
あなたの問題はうまいです。あなたの "実用的な"例は、あなたのユースケースと一致しません。 'activity2.PutExtra(" TaskId "、" 1 ");'を 'activity2.PutExtra(" TaskId "、1);'に変更してみてください - 同じ問題が表示されます – pnavk