Android 处理单击图标菜单项

Android 处理单击图标菜单项,android,menu,Android,Menu,我发现可以通过点击图标或实现 onOptionsItemSelected 在活动中,或通过使用 onMenuItemClickListener 就像在按钮上单击onclick listener一样。什么时候最好使用第一种方法,什么时候使用第二种方法? 因为在我看来,使用外部侦听器会使代码更加模块化,但会创建一个新类,但使用第一种方法不会创建新类,但会使代码更加模块化…如果您的目标是API 14或更高版本(ICS或更高版本),则可以实现一个新类。如果这不是一个选项,那么您可以实现一个基本活动,

我发现可以通过点击图标或实现

onOptionsItemSelected
在活动中,或通过使用

onMenuItemClickListener
就像在按钮上单击onclick listener一样。什么时候最好使用第一种方法,什么时候使用第二种方法?
因为在我看来,使用外部侦听器会使代码更加模块化,但会创建一个新类,但使用第一种方法不会创建新类,但会使代码更加模块化…

如果您的目标是API 14或更高版本(ICS或更高版本),则可以实现一个新类。如果这不是一个选项,那么您可以实现一个基本活动,该活动将始终填充菜单并使用
onOptionsItemSelected
处理任何菜单单击。这是一种在所有活动中实现“关于”或“设置”菜单项的好方法。

除了下面概述的用例之外,还有其他用例,但我将介绍经常出现的一般用例

onOptionsItemSelected

如果你使用<代码>片段 s,你可能想使用<代码> OnopyStisteMeult>代码>,并考虑将菜单项添加到动作条中,如

中所描述的方式。 这描述的是在
片段中实现的。要实现这一点,您必须调用
onCreate

protected void onCreate(Bundle savedInstanceState) {
    this.setHasOptionsMenu(true);
}
设置此选项实际上会使
活动
调用
onCreateOptions菜单
,从而允许您添加菜单项

@Override
public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);

    // add items corresponding to this Fragment
    menu.add(...);

    return true;
}
我建议这样做的原因是,它允许您将更多的菜单处理代码放入
片段
,而不是
活动
,以确定要调用哪个
片段
,等等

在这种情况下,单击菜单项将调用我建议的
片段内的
onoptionItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.my_id1:
            dothing1();
            return true;
        case R.id.my_id2:
            dotghing2();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
这是一个冗长的答案,但这是处理
片段中的菜单单击的方法

onMenuItemClickListener

onMenuItemClickListener
的情况下,当您不想使用上面的pre-ready方法并实现自己的方法时,可以使用此方法

我的意思是实现
OnMenuItemClickListener
并在接口中生成方法。然后,指定菜单调用实现此功能的
活动
,其中,作为上述选项,根据
活动
片段
关系的预准备实现,假定要使用的
活动