xamarin.android - DatePickerFragment SelectedValue Xamarin.Android
问题描述
我想在 xamarin android 的 DatePickerFragment 中选择一个日期,如下所示:
DatePickerFragment frag = DatePickerFragment.NewInstance(delegate(DateTime time)
{
LoadMap(time.ToString("yyyy-MM-dd"));
});
frag.Show(FragmentManager, DatePickerFragment.TAG);
同时 DatePickerFragment 类是这样的:
public class DatePickerFragment : Android.Support.V4.App.DialogFragment,
DatePickerDialog.IOnDateSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;
return frag;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
currently.Year,
currently.Month - 1,
currently.Day);
return dialog;
}
public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// Note: monthOfYear is a value between 0 and 11, not 1 and 12!
DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
Log.Debug(TAG, selectedDate.ToLongDateString());
_dateSelectedHandler(selectedDate);
}
}
问题是每次我尝试选择一个日期时,日期选择器只在今天显示,它发生的原因是DateTime currently = DateTime.Now;
. 如何更改此设置,以便 Datepicker 存储上次选择的日期?
解决方案
我通过static selectedDate = DateTime.Today;
在DatePickerFragment
下面的类中声明完整类来解决:
public class DatePickerFragment : Android.Support.V4.App.DialogFragment, DatePickerDialog.IOnDateSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
private static DateTime selectedDate = DateTime.Today;
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;
return frag;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = selectedDate;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
currently.Year,
currently.Month - 1,
currently.Day);
return dialog;
}
public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// Note: monthOfYear is a value between 0 and 11, not 1 and 12!
selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
Log.Debug(TAG, selectedDate.ToLongDateString());
_dateSelectedHandler(selectedDate);
}
}
推荐阅读
- c# - 寻找如何在没有 C# Cmdlet 定义的情况下将详细或调试字符串消息写入 PowerShell 运行空间
- apache-spark - 为什么 Spark 将所有任务发送给两个执行器?
- asp.net - 如何立即将 ASP.NET MVC 中的大文件作为 FileStreamResult 返回,而无需等待它在服务器端完全下载?
- javascript - Angular 资产上的 404 断断续续
- macos - “显示所有窗口”macos 停靠图标给出错误
- cocoapods - 从 Xcode 项目中删除特定的 pod
- ocaml - 如何在 OCaml 中的两个实现代码之间进行选择
- android - SMSManager 发送的短信数量是多少?
- linux - 使用 bash 脚本删除“.bash_aliases”
- asp.net-core - 使用 Windows 身份验证时 PolicyServerClaimsMiddleware 中的 PolicyServer.Local 错误