【问题标题】:Xamarin.forms android Prism handle hardware back buttonXamarin.forms android Prism 手柄硬件后退按钮
【发布时间】:2019-02-03 07:08:36
【问题描述】:

我在处理 android 设备上的返回按钮时遇到问题。我想在用户按下硬件后退按钮时处理导航堆栈,我该如何实现?

【问题讨论】:

  • 你具体想要什么?
  • protected override bool OnBackButtonPressed (); 是您正在寻找的事件处理程序。来自文档:按下硬件后退按钮时引发的事件。此事件不会在 iOS 上引发。

标签: c# android xamarin.forms prism back-button


【解决方案1】:

您可以覆盖OnBackButtonPressed() 函数

protected override bool OnBackButtonPressed (){
    //Handle your navigation here
}

详情来自官方docs

注意:这仅适用于 Android,但这似乎是您要求的唯一平台。如果您需要跨平台解决方案,请参阅this 问题。

【讨论】:

  • 谢谢@Oscar Chambers 是否可以在我使用 prism 时移除导航堆栈,这样 InavigationService 将无法在后面的代码中访问,您能否对此有所了解。
  • @JitendraJadav 您不应该从后面的代码中导航,Prism 是一个框架,用于在 WPF、Windows 10 UWP 和 Xamarin Forms 中构建松散耦合、可维护和可测试的 XAML 应用程序。
  • @LeRoy 对,所以 OnBackButtonPressed 只有在我的导航在 MVVM 上时才能在后面的代码中访问它,我担心的是如何删除页面或浏览后面的代码。
  • @JitendraJadav 只有在指定绝对 URI 时才能这样做 - _navigationService.NavigateAsync("/MainPage");
  • @LeRoy 谢谢你的回复,但 _navigationService.NavigateAsync 仍然只能在 ViewModel 中访问,而 OnBackButtonPressed 将在代码后面,所以我如何访问 ViewModel?使用 Messanger,但这仍然是我必须使用的每一页。
【解决方案2】:

我不知道这是一个好习惯,但它对我有用。

protected override bool OnBackButtonPressed()
{
    var vm = (SignInViewModel)BindingContext;

    vm.GoBackCommand.Execute();

    return base.OnBackButtonPressed();
}

在 ViewModel 中,您可以处理您想要执行的操作。

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2017-01-19
    • 2022-09-27
    相关资源
    最近更新 更多