首页 > 解决方案 > 即使我使用 Android.Support.V7.Widget.Toolbar Xamarin Forms,OnOptionsItemSelected 也不会触发

问题描述

在我的 Xamarin 表单应用程序中,Android 端我想覆盖导航栏后退按钮单击。我遵循了本教程,但没有运气。https://theconfuzedsourcecode.wordpress.com/2017/03/12/lets-override-navigation-bar-back-button-click-in-xamarin-forms/ 从不触发。但 OnBackPressed() 运作良好。

主要活动。

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
        //, ScreenStateListener
    {

        const int RequestLocationId = 0;

        readonly string[] PermissionsGroupLocation =
            {
                            //TODO add more permissions
                            Manifest.Permission.AccessCoarseLocation,
                            Manifest.Permission.AccessFineLocation,
                            Manifest.Permission.AccessLocationExtraCommands,
                            Manifest.Permission.AccessMockLocation,
                            Manifest.Permission.ReadExternalStorage,
                            Manifest.Permission.WriteExternalStorage,
                            Manifest.Permission.ReadPhoneState,
                            Manifest.Permission.Camera
        };

       // CustApp.ScreenListener.ScreenListener mScreenListener;
        protected async override void OnCreate(Bundle savedInstanceState)
        {
            await TryToGetPermissions();
            Rg.Plugins.Popup.Popup.Init(this, savedInstanceState);
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            Forms.SetFlags("CollectionView_Experimental"); //added for carousal view

            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            Xamarin.FormsMaps.Init(this, savedInstanceState);
            Xamarin.FormsGoogleMaps.Init(this, savedInstanceState);
            UserDialogs.Init(this);
            ZXing.Net.Mobile.Forms.Android.Platform.Init();
            CrossCurrentActivity.Current.Init(this, savedInstanceState);
            Plugin.InputKit.Platforms.Droid.Config.Init(this, savedInstanceState);
            LoadApplication(new App());

            Android.Support.V7.Widget.Toolbar toolbar = this.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            // coded to disappear status bar
            Window.AddFlags(WindowManagerFlags.Fullscreen);
            Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen);

            //  mScreenListener = new CustApp.ScreenListener.ScreenListener(this);
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            if (item.ItemId == 16908332)
            {

                var currentpage =
                Xamarin.Forms.Application.
                Current.MainPage.Navigation.
                NavigationStack.LastOrDefault() as HPayment;

                if (currentpage?.CustomBackButtonAction != null)
                {
                    // invoke the Custom back button action
                    currentpage?.CustomBackButtonAction.Invoke();
                    // and disable the default back button action
                    return false;
                }

                // if its not subscribed then go ahead 
                // with the default back button action
                return base.OnOptionsItemSelected(item);


            }
            else
            {
                return base.OnOptionsItemSelected(item);
            }
        }


        public override void OnBackPressed()
        {
            if (Rg.Plugins.Popup.Popup.SendBackPressed(base.OnBackPressed))
            {
                // Do something if there are some pages in the `PopupStack`

                Task.Run(async () =>
                {
                    popupPageClickInstance.Instance.popupPageSuccess = false;
                    AdvertisementInstance.Instance.AdvertisementIsSeen = false;
                    await PopupNavigation.Instance.PopAsync();
                });

            }
            else
            {
                // Do something if there are not any pages in the `PopupStack`
            }
        }
}

标签: xamarin.formsxamarin.android

解决方案


推荐阅读