这是什么R.id.home?

问题描述

一个孩子活动工具栏的多个父活动“后退按钮”

@Override
public boolean onoptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackpressed();
        return true;
    }
    return super.onoptionsItemSelected(item);
}

对于后退按钮的功能,我必须重写此功能,并回调到调用该子级的同一父活动,但我不理解以下代码
id == android.R.id.home
什么是R.id.homehome代表?我必须在任何地方都必须使用相同的R.id.home,我必须在我的应用程序中使用此后退按钮功能吗?

解决方法

您可能已经习惯使用R.id.whatever来引用您为应用程序视图提供的ID。给TextView赋予label的ID,然后您就可以通过以R.id.label作为ID的视图来查找它。

R文件是根据您添加或声明的资源为您的应用生成的。但是 android.R.id.home Android的 R文件中的ID-您可以将其视为一组单独的系统资源。它不会与您赋予“ home” ID的任何内容相冲突,因为它将改为R.id.home

当您在工具栏上调用setHomeButtonEnabled时,Android将添加其自己的图标,并为其提供内部ID android.R.id.home。这始终是该主页按钮的标识符,您可以通过在选择菜单项时检查该ID来检查是否被按下。

,

R是从Android资源包中获取内容的方法。 id告诉您要从中获取id(您也可以要求它提供其他东西,例如string)。

home是您要求的实际ID。根据您的问题判断,可能是一个按钮。在视图编辑器中设置ID。

Editor window

如果您在应用程序中进行搜索,则可能会找到ID为home的按钮。

,

一个简短的答案是:一种访问资源的方法。
资源可以是TextViewButton,也可以是一些StringsDrawable图像。

R.id.home代表某个特定资源,即MentuItem,因此,代码可以确定是否选择了MenuItem-{中可能有多个MenuItem {1}}因此,代码将找出是否选择了Menu = MenuItem的{​​{1}}。

您的id HTML文件中应该包含以下内容:

home

重要说明:每个资源必须具有不同的标识符( id ),以避免模棱两可的访问。

在这里您可以找到有关Menu的详细信息,并带有已说明的用例。 Here