当前位置: 首页 > 知识库问答 >
问题:

未在xamarin Froms-AndroidX中调用OnOptionsItemSelected

斜博超
2023-03-14
    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工具栏,它仍然无法工作。

有人面临类似的问题吗?

共有1个答案

淳于俊迈
2023-03-14

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

您可以如下所示:

在MainActivityoncreate()方法中:

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);
    }
<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"/>
 类似资料:
  • 问题内容: 我有一个简单的程序,其中显示了一些项目的列表,单击其中的一个后,单击的项目将传递回附件。当用户取消对话框时,我还想执行一些默认处理(使用 后退按钮 )-更具体地说,在这种情况下,我想向活动传递一个空字符串。 但是,如果将对话框放在(来自 兼容性包 )中, 则使用后退按钮关闭对话框时不会调用 。我究竟做错了什么? 问题答案: 这可能与您的代码中没有显式调用的事实有关。该OnCancelL

  • 我有GCMinentService,以便将GCM消息传递到我的应用程序。在我的其他应用程序项目中,同样的代码也可以正常工作,但在这个新项目中,设备注册正确,我得到了注册,等等。。。在这个类中,我想向当前登录的用户注册de设备令牌,为此,我使用AsyncTask使用Ksoap2调用我的Web服务。 调用到webServices的方法工作正常,但onPostExecute从未被调用,但是doInBac

  • 问题内容: 好吧,我受够了尝试。 该方法不起作用。知道为什么吗? 编辑: 该方法在我调用时执行,但是显然这不是目的,而且我也不会获得所需的参数。 问题答案: 不再存在。您应该使用它来获得所需的功能。我相信示例具有您的特定情况。我在下面对其进行了修改,使其与您的匹配。

  • 我有一个片段,其中有recyclerview,并使用recyclerview适配器在这个recyclerview中设置数据。 现在,我在适配器的列表项中单击了一个按钮,我需要检查android中的READ\u EXTERNAL\u STORAGE权限,以查看android中的新权限模型。 我在这个适配器的片段中创建了一个新函数,用于检查是否授予了权限,如果尚未授予权限,则请求权限。 我已经通过了我

  • Android Jetpack Jetpack is a suite of libraries, tools, and guidance to help developers write high-quality apps easier. These components help you follow best practices, free you from writing boilerpla

  • 我想单击按钮将添加到中,但未调用适配器的实现方法。 这是我的代码: CourseDetailAdapter。班 我想为输入数据添加layout,所以我不确定是否正确