处理单击iconmenu项目

时间:2013-02-21 17:44:37

标签: android menu

我看到可以点击iconmenù项目或实施

onOptionsItemSelected

在活动中,或使用

onMenuItemClickListener
像按钮上的onclick监听器一样。何时更好地使用第一种方法,何时第二种方法? 因为对我来说,使用外部监听器会使代码更加模块化,但是创建一个新类,但是使用第一种方法不会创建新类,但会使代码更少模块化......

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

除了下面列出的用例之外,还有一些用例,但我会提出定期出现的一般情况。

<强> onOptionsItemSelected

如果您使用的是Fragment,则可能需要使用onOptionsItemSelected,并考虑按照{{3}中描述的方式将菜单项添加到操作栏 }}

这描述了在Fragment内实施Adding items to the Action Bar。要实现此目的,您必须在onCreate中致电onCreateOptionsMenu

protected void onCreate(Bundle savedInstanceState) {
    this.setHasOptionsMenu(true);
}

设置此选项实际上会使Activity调用onCreateOptionsMenu允许您添加菜单项。

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

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

    return true;
}

我建议这样做的原因是,它允许您将更多菜单处理代码放入Fragment而不是Activity,以确定要调用哪个Fragment等。

在这种情况下,点击该菜单项会在我建议的onOptionsItemSelected内拨打Fragment

@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);
    }
}

更多冗长的答案,但这是处理Fragment内的菜单点击的方法。

<强> onMenuItemClickListener

对于onMenuItemClickListener,当您不想使用上面的预先准备好的方法并实现自己的方法时,会使用此方法。

我的意思是你实现 OnMenuItemClickListener并在界面中生成方法。然后,您可以指定菜单以调用实现此功能的Activity,因为上述选项会根据ActivityActivity的预先准备好的实现假设Fragment要使用的内容关系。