Последние несколько дней я экспериментировал со сборщиками времени в Xamarin.Android. Я следовал этим двум ссылкам:Как обновить несколько сборщиков времени отдельно
How to update text-view with multiple datepickers
http://blog.falafel.com/31-days-of-xamarin-android-day-15-controls-datetime-controls/
Но теперь я немного застрял.
У меня есть два сборщика времени в той же деятельности. Я хочу выбрать время начала и время окончания. Но когда я устанавливаю время одного из таймера в своей деятельности, он автоматически обновляет другой.
То, что я хочу, устанавливается один раз, не обновляя другой. Ниже то, что я пробовал:
ReservationHoursActivity.cs
public class ReservationHoursActivity : Activity, TimePickerDialog.IOnTimeSetListener
{
private TextView time_display_Start;
private Button pick_button_Start;
private TextView time_display_End;
private Button pick_button_End, submitButtonMyslot;
private int hour;
private int minute;
const int START_TIME_DIALOG_ID = 0;
const int END_TIME_DIALOG_ID = 1;
const int TIME_PICKER_TO = 0;
const int TIME_PICKER_FROM = 1;
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.ReservationHoursLayout);
time_display_Start = FindViewById<TextView> (Resource.Id.timeDisplayStart);
pick_button_Start = FindViewById<Button> (Resource.Id.btnPickTimeStart);
time_display_End = FindViewById<TextView> (Resource.Id.timeDisplayEnd);
pick_button_End = FindViewById<Button> (Resource.Id.btnPickTimeEnd);
submitButtonMyslot = FindViewById<Button> (Resource.Id.btnSubmitSlot);
submitButtonMyslot.Click += SubmitButtonMyslot_Click;
pick_button_Start.Click += delegate {
ShowTimePickerDialog (START_TIME_DIALOG_ID);
};
pick_button_End.Click += delegate {
ShowTimePickerDialog (END_TIME_DIALOG_ID);
};
hour = DateTime.Now.Hour;
minute = DateTime.Now.Minute;
UpdateDisplayStart (hour, minute);
UpdateDisplayEnd (hour, minute);
}
void ShowTimePickerDialog (int pickerID)
{
switch (pickerID) {
case TIME_PICKER_FROM:
var dialogStart = new TimePickerFragment (this, hour, minute, this);
dialogStart.Show (FragmentManager, null);
break;
case TIME_PICKER_TO:
var dialogEnd = new TimePickerFragment (this, hour, minute, this);
dialogEnd.Show (FragmentManager, null);
break;
}
}
public void OnTimeSet (TimePicker view, int hourOfDay, int minute)
{
UpdateDisplayEnd (hourOfDay, minute);
UpdateDisplayStart (hourOfDay, minute);
}
void UpdateDisplayStart (int selectedHours, int selectedMinutes)
{
time_display_Start.Text = selectedHours + ":" + selectedMinutes;
}
void UpdateDisplayEnd (int selectedHours, int selectedMinutes)
{
time_display_End.Text = selectedHours + ":" + selectedMinutes;
}
}
TimePickerFragment.cs
public class TimePickerFragment:DialogFragment
{
private readonly Context context;
private int hour;
private int minute;
private readonly TimePickerDialog.IOnTimeSetListener listener;
public TimePickerFragment (Context context, int hour, int minute, TimePickerDialog.IOnTimeSetListener listener)
{
this.context = context;
this.hour = hour;
this.minute = minute;
this.listener = listener;
}
public override Dialog OnCreateDialog (Bundle savedState)
{
var dialog = new TimePickerDialog (context, listener, hour, minute, false);
return dialog;
}
}
Я не знаю, как я могу обновить два временных сборщиков в отдельности. Я также попытался поставить метод OnTimeSet внутри этого:
private TimePickerDialog.IOnTimeSetListener From_Time_Listener = new TimePickerDialog.IOnTimeSetListener()
{
public void OnTimeSet (TimePicker view, int hourOfDay, int minute)
{
UpdateDisplayEnd (hourOfDay, minute);
}
};
Но это не работает. Это не позволяет мне помещать этот метод внутрь. Кроме того, другие переменные и методы будут неожиданными, если я это сделаю.