OnOptionsItemSelected 未以 xamarin 形式调用 - AndroidX
OnOptionsItemSelected not called in xamarin froms - AndroidX
我正在使用 Xamarin Forms 项目,我正在尝试覆盖导航栏后退按钮的默认行为,以便 运行 我自己的导航服务。
我的 MainActivity 派生自 FormsAppCompatActivity
以前的工作解决方案是在 OnCreate 和 OnOptionsItemSelected 方法中添加以下行:
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"/>
我正在使用 Xamarin Forms 项目,我正在尝试覆盖导航栏后退按钮的默认行为,以便 运行 我自己的导航服务。
我的 MainActivity 派生自 FormsAppCompatActivity
以前的工作解决方案是在 OnCreate 和 OnOptionsItemSelected 方法中添加以下行:
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"/>