从API 23开始,Android计时器的属性似乎已更改名称。MvxTimePicker绑定到仅在API 23和更新版本上存在的小时。我的解决方法如下。我将MvxTimePicker更改为TimePicker,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TableHeaderTextView"
android:text="Start Time" />
<TimePicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
android:id="@+id/tpTime"
android:textSize="20dp" />
<!--local:MvxBind="Value StartTime" />-->
<LinearLayout
android:orientation="horizontal"
android:gravity="right"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Close"
style="@style/DialogButton"
local:MvxBind="Click CloseCommand" />
</LinearLayout>
</LinearLayout>
我将MvxDialogFragment中的OnCreateView更改为:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var ignore = base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.HoursStartDialogView, null);
var tp = view.FindViewById<TimePicker>(Resource.Id.tpTime);
if (Build.VERSION.SdkInt <= BuildVersionCodes.LollipopMr1)
{
#pragma warning disable CS0618
tp.CurrentHour = (Java.Lang.Integer)ViewModel.StartTime.Hours;
tp.CurrentMinute = (Java.Lang.Integer)ViewModel.StartTime.Minutes;
}
else
{
tp.Hour = ViewModel.StartTime.Hours;
tp.Minute = ViewModel.StartTime.Minutes;
}
tp.TimeChanged += (s, e) =>
{
ViewModel.StartTime = new TimeSpan(e.HourOfDay, e.Minute, 0);
};
return view;
}
是的,这是一个与我原来的问题不同的应用程序,但我先修复了这个,因此一些名称发生了变化。这适用于早期版本的Android。
我将在MvvmCross网站上提出一个bug建议,但这将暂时解决您的问题。
****更新****
这个bug将在MvvmCross版本6.0.2中修复,我的原始帖子将按预期运行。