XamarinForms AppCompat OnOptionsItemSelected

时间:2015-10-12 10:13:36

标签: xamarin xamarin.android android-appcompat xamarin-forms

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

我确实有一个问题,在我以前的旧FormsApplicationActivity中,当用户点击后退箭头图标并执行一些viewmodel清理时,我曾使用覆盖OnOptionsItemSelected方法来拦截。显然,使用FormsAppCompatActivity后不会调用此方法。 我怎样才能拦截"软"后退按钮(工具栏图标不是硬后退按钮)?

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

有没有人知道如何拦截这个?

3 个答案:

答案 0 :(得分:1)

您可以将以下内容添加到自定义渲染器中。您可以使用current activity plugin或将您的上下文投射到活动。

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

toolbar.NavigationClick += ToolbarNavigationClick;

答案 1 :(得分: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);

答案 2 :(得分: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
        }
    }
}

希望这会有所帮助