OnOptionsItemSelected 未以 xamarin 形式调用 - AndroidX

OnOptionsItemSelected not called in xamarin froms - AndroidX

我正在使用 Xamarin Forms 项目,我正在尝试覆盖导航栏后退按钮的默认行为,以便 运行 我自己的导航服务。

我的 MainActivity 派生自 FormsAppCompatActivity

以前的工作解决方案是在 OnCreateOnOptionsItemSelected 方法中添加以下行:

    protected override void OnCreate(Bundle bundle)
    { 
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());

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

    }

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        if (item.ItemId != Android.Resource.Id.Home) return base.OnOptionsItemSelected(item);

        return !UseINavigationService() && base.OnOptionsItemSelected(item);
    }

这似乎不再有效。 SetSupportActionBar 需要类型为 AndroidX.AppCompat.Widget.Toolbar 的参数,它不适用于 Android.Support.V7.Widget.Toolbar。另外,如果我使用 AndroidX 工具栏而不是 V7 工具栏,它仍然无法正常工作。

有人遇到过类似的问题吗?

AndroidX 替换了 Android 支持库,因此任何对 Android 支持库类型的引用都必须替换为对 AndroidX 类型的引用。

你可以这样做:

在您的 MainActivity OnCreate() 方法中:

protected override void OnCreate(Bundle savedInstanceState)
    {
        //TabLayoutResource = Resource.Layout.Tabbar;
        //ToolbarResource = Resource.Layout.Toolbar;
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
        AndroidX.AppCompat.Widget.Toolbar toolbar = FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);
    }

然后在您的 ToolBar.xaml 中将 Android.Support.V7.Widget 命名空间更改为 AndroidX.AppCompat.Widget:

<androidx.appcompat.widget.Toolbar
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="?attr/colorPrimary"
  android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
  android:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>