C# Xamarin时间选择器片段对话框
我正在用C开发一个Xamarin Android应用程序,我正在尝试实现一个时间选择器对话框,在这个对话框中,用户选择一个给定的时间,他们将每天或每周的几天收到通知 我知道有一个TimePickerDialog控件不推荐使用,我们现在需要使用一个片段对话框。如果有人能帮助我,我将非常感激C# Xamarin时间选择器片段对话框,c#,android,android-fragments,xamarin,android-timepicker,C#,Android,Android Fragments,Xamarin,Android Timepicker,我正在用C开发一个Xamarin Android应用程序,我正在尝试实现一个时间选择器对话框,在这个对话框中,用户选择一个给定的时间,他们将每天或每周的几天收到通知 我知道有一个TimePickerDialog控件不推荐使用,我们现在需要使用一个片段对话框。如果有人能帮助我,我将非常感激 谢谢 您最好扩展DialogFragment并从中创建自己的TimePickerFragment。安卓甚至在这个主题上有一个完整的文档: 注意:您必须转换相应的Java->C,但这应该不是一个太大的问题 pub
谢谢 您最好扩展DialogFragment并从中创建自己的TimePickerFragment。安卓甚至在这个主题上有一个完整的文档: 注意:您必须转换相应的Java->C,但这应该不是一个太大的问题
public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
{
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
Calendar c = Calendar.Instance;
int hour = c.Get(CalendarField.HourOfDay);
int minute = c.Get(CalendarField.Minute);
return new TimePickerDialog(Activity, this, hour, minute, DateFormat.Is24HourFormat(Activity));
}
public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
{
//Do something when time chosen by user
}
}
以下是项目的示例代码:
class TimePickerFragment : DialogFragment
{
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
return new TimePickerDialog(Activity, (sender, args) =>
{
//args contains new time
}, DateTime.Now.Hour, DateTime.Now.Minute, true);
}
}
下面是我如何实现TimePickerDialog的示例 声明EditText控件您可以只使用TextView EditText startTimeInput=FindViewBydResource.Id.newEventStartTimeInput 通过扩展DialogFragment和handle OnCreate和OnTimeSet方法来创建TimePickerFragment
//Time Picker
public class TimePickerFragment : DialogFragment,
TimePickerDialog.IOnTimeSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "Y:" + typeof(TimePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<TimeSpan> _timeSelectedHandler = delegate { };
public static TimePickerFragment NewInstance(Action<TimeSpan> onTimeSet)
{
TimePickerFragment frag = new TimePickerFragment();
frag._timeSelectedHandler = onTimeSet;
return frag;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
Calendar c = Calendar.Instance;
int hour = c.Get(CalendarField.HourOfDay);
int minute = c.Get(CalendarField.Minute);
bool is24HourView = true;
TimePickerDialog dialog = new TimePickerDialog(Activity,
this,
hour,
minute,
is24HourView);
return dialog;
}
public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
{
//Do something when time chosen by user
TimeSpan selectedTime = new TimeSpan(hourOfDay, minute, 00);
Log.Debug(TAG, selectedTime.ToString());
_timeSelectedHandler(selectedTime);
}
}
希望这有帮助 谢谢乔治,请看我上面的评论。@Amitaros:你有什么问题?对不起,此代码已在COh中。我只是不太懂代码。有机会的时候我会试试的。捆绑是什么意思?谢谢。@Giorgi对于较新的开发人员,您可能应该参考MvxDialogFragment的来源。@JonDouglas:我以为问题是关于MvvmCross的,我将删除它。谢谢Jon。。我在编程方面不是很有经验,所以我真的不知道如何将其转换为C,尤其是Xamarin。我在他们的网站上找到了这个,但它只是一个日期选择器对话框,我没有成功地将它实现到一个时间选择器。任何帮助都将不胜感激。谢谢,谢谢!当我有机会的时候,我会尝试一下。@JonDouglas-我可以禁用小时时间选择器吗?
private void StartTimeInput_Click(object sender, EventArgs e)
{
TimePickerFragment frag = TimePickerFragment.NewInstance(delegate (TimeSpan time)
{
startTimeInput.Text = time.ToString();
});
frag.Show(FragmentManager, TimePickerFragment.TAG);
}