如何在 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's
UI,你可以使用下面的代码:
控制器中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
中,注册为名为changeUI
的Notification
的观察者。
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 一个名为 changeUI
的 Notification
,所有观察者将收到 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
我有一个 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's
UI,你可以使用下面的代码:
控制器中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
中,注册为名为changeUI
的Notification
的观察者。
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 一个名为 changeUI
的 Notification
,所有观察者将收到 Notification
并执行预定义的功能(这里是 doChangeUI
)。您可以在 dict
(notification.UserInfo
) 中获取您的个人需求,并在控制器中更新 UI。
您可以参考:NSNotificationCenter
对于Xamarin.Android:
您可以在 Xamarin.Android 中使用 Broadcast-Receivers
。它与 Xamarin.iOS.
1.Creating Broadcast Receiver
在 Activity A,B,C
;
2.Publishing Activity 中的 Broadcast
D
;
3.Do你收到广播时的东西
更多细节可以参考文档:broadcast-receivers