我正在创建一个简单的应用程序,其中TimePicker
用于捕获小时和分钟。我使用代码执行以下操作:
end.AddHours(view.FindViewById<TimePicker>(Resource.Id.endPicker).Hour);
end.AddMinutes(view.FindViewById<TimePicker>(Resource.Id.endPicker).Minute);
问题在于Hour
和Minute
属性,而 end 是DateTime
。
在KitKat API lvl 19上,Visual Studio给出了以下错误:
但是,在MarshMallow API lvl 23上,App运行得非常好。所以问题必须是在getCurrentMinute/Hour
方法的后期API中交换Java getMinute/Hour
方法,因为它是here。有没有办法在早期的API中使用早期的方法,并在以后的方法中使用最新的方法?我可以将其编码到我的Xamarin.Android应用程序中吗?在Native Android中,我当然会检查SDK版本并相应地使用Java方法,但我不知道是否可以强制底层Java代码以这种方式运行。
更新
根据 Janmejoy 的建议,我创建了一个if
语句来检查有问题的案例中的Android版本,并使用了弃用的代码:
if(((int)Android.OS.Build.VERSION.SdkInt) < 23)
{
start = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentMinute, 0);
end = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentMinute, 0);
}
这似乎有效,但是,我的应用程序在模拟的KitKat设备上非常慢(它在1 GB Marsh上运行完美,但在早期的762 MB RAM设备上似乎有问题)。更糟糕的是,现在应用程序在Marsh和KitKat上看起来都是相同的,表现出同样的错误行为。我从两个设备上删除了应用程序,注释掉了已弃用的代码并完成了RebuildAll,但这种奇怪的行为仍然存在。有没有人见过类似的?可能是什么问题?
答案 0 :(得分:1)
在Native Android中,我当然会查看SDK版本并使用 相应的Java方法,
是的你是对的!您也可以在Xamarin中尝试这样做
if (((int)Android.OS.Build.VERSION.SdkInt) >= 23){
//
}
else{//}
@see https://developer.xamarin.com/api/property/Android.OS.Build+VERSION.SdkInt/