Xamarin.Android:如何使用TimePicker小部件处理折旧问题?

时间:2017-08-12 18:28:57

标签: xamarin.android deprecated timepicker

我正在创建一个简单的应用程序,其中TimePicker用于捕获小时和分钟。我使用代码执行以下操作:

end.AddHours(view.FindViewById<TimePicker>(Resource.Id.endPicker).Hour);
end.AddMinutes(view.FindViewById<TimePicker>(Resource.Id.endPicker).Minute);

问题在于HourMinute属性,而 end DateTime

在KitKat API lvl 19上,Visual Studio给出了以下错误:

NoSuchMethodError

但是,在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,但这种奇怪的行为仍然存在。有没有人见过类似的?可能是什么问题?

1 个答案:

答案 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/