Как распространять изменения при обратной навигации в 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. Делайте ваши вещи, когда вы получили трансляцию

Вы можете обратиться к документу для более подробной информации: широковещательные приемники

Другие вопросы по тегам