Как распространять изменения при обратной навигации в android и ios?
У меня есть приложение Xamarin.Android и Xamarin.iOS. В приложении есть модель данных, которая называется PRODUCT. На разных экранах мы будем перечислять продукты в зависимости от запросов или других критериев. Допустим, пользователь перешел из Activity-A (ViewController в ios) к Activity-B и далее в C, D и т. Д., Выбрав определенный продукт. Основываясь на взаимодействии с пользователем в Activity-D, мне нужно обновить пользовательский интерфейс во всех других действиях при переходе назад от D к A . Как я могу распространить изменения вниз по стеку или как соответствующим образом обновить пользовательский интерфейс при переходе назад. Определенное действие может содержать элемент пользовательского интерфейса непосредственно в нем, а в других местах - его часть списка. Продукт будет иметь уникальный идентификатор.
1 ответ
Решение:
Для Xamarin.iOS:
Существует несколько способов передачи данных между ViewControllers. Здесь я рекомендую вам использовать NSNotificationCenter
в твоем случае. Например, если вы хотите изменить A,B,C's
Пользовательский интерфейс, когда вы делаете определенные действия в D
, вы можете использовать код ниже:
В контроллере D
: опубликовать Notification
в заданном вами действии вы можете добавить свои личные требования (например, идентификатор продукта, стиль пользовательского интерфейса) в словарь (третий параметр):
NSNotificationCenter.DefaultCenter.PostNotificationName("changeUI",null, new NSDictionary("key1", 1, "key2", 2));
В контроллере A,B,C
зарегистрироваться в качестве наблюдателя Notification
который назвал changeUI
,
NSObject notificationToken;
void Setup()
{
notificationToken = NSNotificationCenter.DefaultCenter.AddObserver((NSString)"changeUI", doChangeUI);
}
void doChangeUI(NSNotification notification)
{
NSDictionary dict = notification.UserInfo;
Console.WriteLine("changeUI");
}
void Teardown()
{
NSNotificationCenter.DefaultCenter.RemoveObserver(notificationToken);
}
Итак, когда-то контроллер D
опубликовать Notification
названный changeUI
все наблюдатели получат Notification
и выполнить предопределенную функцию (вот doChangeUI
). Вы можете получить ваши личные требования в dict
(notification.UserInfo
) и обновить пользовательский интерфейс в контроллерах.
Вы можете обратиться: NSNotificationCenter
Для Xamarin.Android:
Ты можешь использовать Broadcast-Receivers
в Xamarin.Android. Это почти так же, как NSNotificationCenter в Xamarin.iOS.
1. Создание Broadcast Receiver
в деятельности A,B,C
;
2.Публикация Broadcast
в деятельности D
;
3. Делайте ваши вещи, когда вы получили трансляцию
Вы можете обратиться к документу для более подробной информации: широковещательные приемники