这是什么R.id.home?

What is this R.id.home?

多个 parent 一个活动 child activity 工具栏后退按钮

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

为了后退按钮的功能,我必须覆盖此函数,回调到调用 child 的同一个 parent activity,但我不明白这行代码:
id == android.R.id.home
什么是R.id.homehome代表什么?我是否必须在任何地方使用相同的 R.id.home,我必须在我的应用程序中使用此后退按钮功能?

R 是从 Android 资源包中获取东西的方法。 id 告诉它你想要一个 id(你也可以向它请求其他东西,比如 strings)。

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

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

一个非常简短的答案是:一种访问资源的方式。
资源可以是 TextViewButton 以及一些 StringsDrawable 图片。

R.id.home 表示某些特定资源,即 MentuItem,因此代码通过这种方式确定是否选择了 MenuItem - 中可能有多个 MenuItem Menu 因此,代码会找出是否选择了带有 id=homeMenuItem

你的 Menu HTML 文件中应该有这样的东西:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/home"        
    android:title="BlaBlaBla"
/>
...

重要提示:每个资源必须有不同的标识符(id)以避免访问不明确。

在这里您可以找到有关 R 的详细信息以及解释的用例。 Here

您可能习惯于使用 R.id.whatever 来引用您为应用中的视图提供的 ID。给一个 TextView 一个 ID label,然后你可以通过查找 ID 为 R.id.label 的视图来找到它,那种东西。

R 文件是根据您添加或声明的资源为您的应用程序生成的。但是 android.R.id.homeAndroid 的 R 文件中的一个 ID - 你可以把它想象成一组单独的系统资源。它不会与您为其提供“家庭”ID 的任何内容发生冲突,因为那将是 R.id.home

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