2015-10-21 7 views
0

Читатели хорошего дня, Я пытаюсь использовать метод, который предназначен для андроида, как я могу сделать ContentPage активностью android в PCL, возможно ли это?Специфичный для платформы код Xamarin.Forms

Пробовал с директивами, но его также не работает

public static void AddEvent(GSDEvents ev, Activity ac) 
     { 
      // Id++; 
      Calendar cal = Calendar.GetInstance(Java.Util.TimeZone.Default, Locale.Default); 
      ContentValues eventValues = new ContentValues(); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.CalendarId, Id); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, ev.Title); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.Description, ev.Description); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtstart, GetDateTimeMS(ev.Year, ev.Month, ev.Day, ev.Hour, ev.Minute)); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtend, GetDateTimeMS(ev.Year, ev.Month, ev.Day, ev.Hour, ev.Minute)); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.AllDay, ev.AllDay ? "1" : "0"); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.HasAlarm, ev.HasAlarm ? "1" : "0"); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, "GMT+1:00"); 
      eventValues.Put(CalendarContract.Events.InterfaceConsts.EventEndTimezone, "GMT+1:00"); 

      var uriCalendar = ac.ContentResolver.Insert(CalendarContract.Events.ContentUri, eventValues); 

      ContentValues remindervalues = new ContentValues(); 
      remindervalues.Put(CalendarContract.Reminders.InterfaceConsts.Minutes, ev.ReminderMinute); 
      remindervalues.Put(CalendarContract.Reminders.InterfaceConsts.EventId, Id); 
      remindervalues.Put(CalendarContract.Reminders.InterfaceConsts.Method, (int)Android.Provider.RemindersMethod.Alert); 

      var uriCalendarReminder = ac.ContentResolver.Insert(CalendarContract.Reminders.ContentUri, remindervalues); 

     } 

в моем contentpage

#if __ANDROID__ 

      GSDEvents ev = new GSDEvents(); 
      ev.Title = "Test Event"; 
      ev.Description = "Dit is nog een test van de beschrijving"; 
      GSDEvents.AddEvent(ev, __THEPROBLEM HOW CAN I GET THE ACTIVITY);  
#endif 

кто-то знает, как добиться этого я работаю в PCL Надежда кто-то может мне точку вправо направление.

С наилучшими пожеланиями, Стефан

+1

Почему вы хотите, чтобы бросить его в 'Activity'? Идея заключается в том, что у вас есть «Страницы», которые оптимизированы для межплатформенного использования. Если вам все еще нужен этот взгляд на метод 'Device.OnPlatform'. В противном случае, пожалуйста, предоставьте немного больше фона, чтобы мы могли предоставить вам полезный ответ. –

+0

Will do отредактирует этот пост –

+1

Я до сих пор не понимаю, что вы пытаетесь сделать. Но из того, что вы публикуете, похоже, что вы не должны этого делать. Лучше всего посмотреть на «DependencyService», который я описываю здесь в своем блоге; http://l.verslu.is/1JbkZ9Q. Также ознакомьтесь с элементом управления календарем XLabs, если вам нужен кросс-платформенный календарь https://github.com/XLabs/Xamarin-Forms-Labs/wiki/Calendar-Control –

ответ

2

У вас есть только один вид деятельности. Главное, что вы найдете в своем приложении Droid. Если вам нужно что-то конкретное в коде активности, оно есть и инициировать его из withen вашей страницы форм Xamarin с событием. Страницы действительно не коррелируют с действиями, по крайней мере, не в том, как вы думаете.

Xamarin Forms - это кросс-платформа по дизайну, поэтому, если вы не смогли это сделать на IOS, WP и Droid, вы не можете сделать это внутри форм. Поскольку очевидно, что нет действий на других платформах 2 Формы не имеют понятия о деятельности с PCL.

Я не достаточно хорошо разбираюсь в том, что GSDEvent поможет дальше. Но делать то, что вы хотите, чтобы ваше событие должно было разместить событие на вашем ContentPage. Присвойте код событию из проекта Activity in Your Droid Project и запустите его в своем PCL, когда вы хотите, чтобы он функционировал.

В качестве альтернативы вы можете создать класс в своем PCL с событием на нем. Создайте его в своем проекте дроида и назначьте событие, а затем поместите его в контейнер IOC, доступ к которому вы получите из PCL.