Xamarin工具栏返回/主页按钮的资源ID与Resource.Id.home不匹配。

3

我在Xamarin中为Android的活动创建了一个工具栏。我使用 SupportActionBar.SetDisplayHomeAsUpEnabled(true);启用了后退/主页按钮。如和其他许多stackoverflow帖子所述,我正在尝试使用以下代码来捕获按下后退/主页按钮的事件:

public override bool OnOptionsItemSelected(IMenuItem item)
        {
            System.Diagnostics.Debug.WriteLine("OnOptionsItemSelected() called: " + item.ItemId);
            switch (item.ItemId)
            {
                case Resource.Id.home:
                    System.Diagnostics.Debug.WriteLine("Home button pressed");
                    Finish();
                    return base.OnOptionsItemSelected(item);
                default:
                    return base.OnOptionsItemSelected(item);
            }
        }

当我按下返回按钮时,会调用OnOptionsItemSelected方法,但是item.ItemId不等于Resource.Id.home。前者是16908332(在两个不同的设备上测试过),但后者是2131492903。如何在Xamarin中捕获工具栏中的home/back按钮?一种可能的选项是将back按钮ID硬编码为16908332,但我不知道那个数字是否会永久保持不变。

1
你需要系统资源ID,而不是你的应用程序中的ID。在Xamarin中,我相信它是Android.Resource.Id.Home - Mike M.
2个回答

4

您正在使用错误的资源,您需要来自Android空间的资源:

Android.Resource.Id.Home

出于好奇,Resource.Id.Home是什么?是为了让人们感到困惑并花费数小时搜索才能找到吗? :)) - asnyder
@asnyder 使用 Resource.Id.home(技术上为 R.Id.home)理论上可以构建自己的导航堆栈,从而定义自己的“主页”,个人从未见过这样的实现方式,也不确定如何应用于应用程序(也许是定义一个使用堆栈导航进行向下和返回的启动器,....?) - SushiHangover

0

正确的使用方法是

case Android.Resource.Id.Home:
                Finish();
                break;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接