3

我最近将 xamarin 表单更新为 1.5.1-pre1,以便我可以使用漂亮的 AppCompat 主题。它工作并且看起来非常好。

我确实有一个问题,在我的旧 FormsApplicationActivity 中,我曾经重写 OnOptionsItemSelected 方法来拦截用户单击后退箭头图标并进行一些视图模型清理。显然,在使用 FormsAppCompatActivity 后没有调用此方法。如何拦截“软”后退按钮按下(工具栏图标不是硬后退按钮)?

我还尝试覆盖 Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer 但我似乎无法覆盖它:(

有谁知道我如何拦截这个?

4

3 回答 3

1

您可以将以下内容添加到自定义渲染器中。您可以使用当前活动插件或将您的上下文转换为活动。

var toolbar = CrossCurrentActivity.Current?.Activity?.FindViewById<Toolbar>(Resource.Id.toolbar);

toolbar.NavigationClick += ToolbarNavigationClick;
于 2017-08-23T21:24:29.693 回答
0

看看 OnCreate() 的最后两行 添加它们后 OnOptionsItemSelected 按预期调用)。

https://raw.githubusercontent.com/UdaraAlwis/Xamarin-Playground/master/XFNavBarBackBtnClickOverride/XFNavBarBackBtnClickOverride/XFNavBarBackBtnClickOverride.Droid/MainActivity.cs

        Toolbar toolbar = this.FindViewById<Toolbar>(Resource.Id.toolbar);

        SetSupportActionBar(toolbar);
于 2017-12-05T15:06:15.453 回答
0

在 Xamarin.Forms 中有一种更好的方法来拦截按下 NavigationBar 后退按钮和按下硬件后退按钮,这是创建您自己的NavigationRenderer并覆盖该方法OnPopViewAsync

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationRenderer))]
namespace YourApp.Droid
{
    public class CustomNavigationRenderer : NavigationPageRenderer
    {
        public CustomNavigationRenderer(Context context) : base(context)
        {
        }

        protected override async Task<bool> OnPopViewAsync(Page page, bool animated)
        {
            // Write your code here
        }
    }
}

希望这可以帮助

于 2019-07-26T06:52:24.757 回答