2017-08-12 46 views
0

我正在創建一個簡單的應用程序,其中使用TimePicker來捕獲小時和分鐘。我使用代碼來做到這一點像下面這樣:Xamarin.Android:如何處理TimePicker窗口部件的deprecacy問題?

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

的問題是與HourMinute屬性,同時年底是一個DateTime

在奇巧API拉特19時,Visual Studio給了我以下錯誤:

NoSuchMethodError

在棉花糖API拉特23,但是,應用程序運行得很好。所以這個問題必須是在getMinute/Hour方法的後面的API中交換了Java getCurrentMinute/Hour方法,因爲它被寫入here。有沒有辦法在早期的API中使用早期的方法,並在最新的方法中使用最新的方法?我可以編碼到我的Xamarin.Android應用程序?在Native Android中,我當然會檢查SDK版本並相應地使用Java方法,但我不知道是否可以強制底層Java代碼以這種方式行事。

UPDATE

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設備上非常緩慢(它在1GB Marsh上運行得非常完美,但它似乎是早期的762 MB RAM設備的bug)。更糟糕的是,這款應用程序現在在Marsh和KitKat上看起來都一樣,展現出相同的錯誤行爲。我從兩個設備上刪除了應用程序,將棄用的代碼註釋掉並完成了RebuildAll,但這種奇怪的行爲仍然存在。有沒有人見過類似的東西?可能是什麼問題?

回答

1

In Native Android I would of course check the SDK version and use Java methods accordingly,

是的你說得對!你可以嘗試這樣的Xamarin還

if (((int)Android.OS.Build.VERSION.SdkInt) >= 23){    
// 
} 
else{//} 

@see https://developer.xamarin.com/api/property/Android.OS.Build+VERSION.SdkInt/

+0

謝謝你的回答,但是,這並沒有回答我關於我怎麼能以某種方式_force_ C#編譯到現在已經過時底層Java問題代碼,如果這是可能的話。換句話說,我的問題是我不知道如何修改C#代碼編譯的Java代碼。 – rTECH