在 android 上使用屏幕上的后退按钮时如何取消订阅消息中心?
How to unsubscribe from messaging center when using the ON SCREEN back button on android?
当用户使用某个页面上的后退按钮(左上角)时,我试图从消息中心退订。我已经在为硬件后退按钮做这件事
protected override bool OnBackButtonPressed()
{
MessagingCenter.Unsubscribe<App, string>(this, "Trolley");
return base.OnBackButtonPressed();
}
但它不适用于屏幕上显示的后退按钮。
我知道“OnDisappearing”的存在,但它在我的情况下不起作用,因为我实际上需要它在进入新页面时起作用。
我在第 1 页并订阅“手推车”,然后加载第 2 页,发送消息“手推车”,最后关闭第 2 页。加载第 2 页时会触发 OnDisappearing,因此我无法接收如果我在 OnDisappearing 中取消订阅的消息。
首先,您需要了解Xamarin Life Cycle。并且通过覆盖 OnBackButtonPressed()
将仅在您点击 Android
设备上的物理后退按钮(靠近主页按钮)时起作用 仅 .
对于你的情况,我认为你需要使用PageAppearing
订阅,当你想退订时使用PageDisappearing
。
非模态页面没有 OnPushed
或 OnPopped
。如果你想要这样的方法,你需要自定义你的逻辑。
编辑
我找到了一个方法示例 https://gist.github.com/housecode/33c11faecff2d7be39f3b7503a686527
这里是要点中的代码
扩展 Xamarin.Forms
NavigationPage
以添加 OnPushed
和 OnPopped
事件。只需对任何 Page
实施 IPageEvent
即可添加这些方法,并将 NavigationPage
更改为 ExtNavPage
。
public class ExtNavPage : NavigationPage
{
public ExtNavPage(Page page) : base(page)
{
this.AddNavigationEvent();
}
private void AddNavigationEvent()
{
Popped += (s, e) => NavEventHandle(e, true);
PoppedToRoot += (s, e) => NavEventHandle(e, true);
Pushed += (s, e) => NavEventHandle(e);
}
private void NavEventHandle(NavigationEventArgs e, bool isPop = false)
{
if (e.Page is IPageEvent pe) {
if (isPop)
pe.OnPopped();
else
pe.OnPushed();
}
}
}
public interface IPageEvent
{
void OnPopped();
void OnPushed();
}
当用户使用某个页面上的后退按钮(左上角)时,我试图从消息中心退订。我已经在为硬件后退按钮做这件事
protected override bool OnBackButtonPressed()
{
MessagingCenter.Unsubscribe<App, string>(this, "Trolley");
return base.OnBackButtonPressed();
}
但它不适用于屏幕上显示的后退按钮。 我知道“OnDisappearing”的存在,但它在我的情况下不起作用,因为我实际上需要它在进入新页面时起作用。
我在第 1 页并订阅“手推车”,然后加载第 2 页,发送消息“手推车”,最后关闭第 2 页。加载第 2 页时会触发 OnDisappearing,因此我无法接收如果我在 OnDisappearing 中取消订阅的消息。
首先,您需要了解Xamarin Life Cycle。并且通过覆盖 OnBackButtonPressed()
将仅在您点击 Android
设备上的物理后退按钮(靠近主页按钮)时起作用 仅 .
对于你的情况,我认为你需要使用PageAppearing
订阅,当你想退订时使用PageDisappearing
。
非模态页面没有 OnPushed
或 OnPopped
。如果你想要这样的方法,你需要自定义你的逻辑。
编辑
我找到了一个方法示例 https://gist.github.com/housecode/33c11faecff2d7be39f3b7503a686527
这里是要点中的代码
扩展 Xamarin.Forms
NavigationPage
以添加 OnPushed
和 OnPopped
事件。只需对任何 Page
实施 IPageEvent
即可添加这些方法,并将 NavigationPage
更改为 ExtNavPage
。
public class ExtNavPage : NavigationPage
{
public ExtNavPage(Page page) : base(page)
{
this.AddNavigationEvent();
}
private void AddNavigationEvent()
{
Popped += (s, e) => NavEventHandle(e, true);
PoppedToRoot += (s, e) => NavEventHandle(e, true);
Pushed += (s, e) => NavEventHandle(e);
}
private void NavEventHandle(NavigationEventArgs e, bool isPop = false)
{
if (e.Page is IPageEvent pe) {
if (isPop)
pe.OnPopped();
else
pe.OnPushed();
}
}
}
public interface IPageEvent
{
void OnPopped();
void OnPushed();
}