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



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

解决方案:

适用于Xamarin。iOS:

有几种方法可以在ViewControllers之间传递数据。在这里,我建议您在您的情况下使用NSNotificationCenter。例如,如果您想在D中执行某些指定操作时更改A,B,C'sUI,可以使用以下代码:

在控制器D中:在您指定的操作中发布Notification,您可以在字典(第三个参数(中添加您的个人需求(例如:产品ID、UI样式(:

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

您可以参考:NSNotificationCenter

适用于Xamarin。安卓系统:

您可以在Xamarin.Android中使用Broadcast-Receivers。它与Xamarin.iOS.中的NSNotificationCenter几乎相同

1.在活动A,B,C中创建Broadcast Receiver

2.在活动D中发布Broadcast

3.当你收到广播时,做你的事情

您可以参考文档了解更多详细信息:广播接收器

最新更新