如何在 android 和 ios 中向后导航时传播更改?

How to propagate changes while back navigation in android and ios?

我有一个 Xamarin.Android 和 Xamarin.iOS 应用程序。该应用程序有一个称为 PRODUCT 的数据模型。在各种屏幕中,我们将根据查询或其他标准列出产品。假设用户从 Activity-A(ios 中的 ViewController)导航到 Activity-B,然后通过选择特定产品进一步导航到 C、D 等。基于 Activity-D 中的用户交互,我需要在所有其他活动中更新 UI,同时从 D 导航回 A 。如何在返回堆栈中传播更改或如何在向后导航时相应地更新 UI 。某些 activity 可能直接包含 UI 元素,而在其他地方它是列表的一部分。该产品将具有唯一 ID。

解法:

对于Xamarin.iOS:

有几种方法可以在 ViewController 之间传递数据。在这里,我建议您根据自己的情况使用 NSNotificationCenter 。例如,如果你想在D中做一些指定的动作时改变A,B,C'sUI,你可以使用下面的代码:

控制器中D: post a Notification in your specify action, you can add your personal requirements (for example:product ID, UI style) in dictionary(第三个参数):

NSNotificationCenter.DefaultCenter.PostNotificationName("changeUI",null, new NSDictionary("key1", 1, "key2", 2));

在控制器A,B,C中,注册为名为changeUINotification的观察者。

 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 post 一个名为 changeUINotification,所有观察者将收到 Notification 并执行预定义的功能(这里是 doChangeUI)。您可以在 dict (notification.UserInfo) 中获取您的个人需求,并在控制器中更新 UI。

您可以参考:NSNotificationCenter

对于Xamarin.Android:

您可以在 Xamarin.Android 中使用 Broadcast-Receivers。它与 Xamarin.iOS.

中的 NSNotificationCenter 几乎相同

1.Creating Broadcast Receiver 在 Activity A,B,C;

2.Publishing Activity 中的 Broadcast D;

3.Do你收到广播时的东西

更多细节可以参考文档:broadcast-receivers