问题描述
一个孩子活动工具栏的多个父活动“后退按钮”
@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.home
? home
代表?我必须在任何地方都必须使用相同的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。
如果您在应用程序中进行搜索,则可能会找到ID为home
的按钮。
一个简短的答案是:一种访问资源的方法。
资源可以是TextView
,Button
,也可以是一些Strings
,Drawable
图像。
R.id.home
代表某个特定资源,即MentuItem
,因此,代码可以确定是否选择了MenuItem
-{中可能有多个MenuItem
{1}}因此,代码将找出是否选择了Menu
= MenuItem
的{{1}}。
您的id
HTML文件中应该包含以下内容:
home
重要说明:每个资源必须具有不同的标识符( id ),以避免模棱两可的访问。
在这里您可以找到有关Menu
的详细信息,并带有已说明的用例。 Here