1

我看到可以处理对图标菜单项的点击或通过实现

onOptionsItemSelected

在活动内部,或通过使用

onMenuItemClickListener

就像按钮上的 onclick 监听器。什么时候最好使用第一种方法,什么时候使用第二种方法?因为在我看来,使用外部侦听器会使代码更加模块化,但是会创建一个新类,但使用第一种方式不会创建新类,而是会使代码模块化程度降低......

4

2 回答 2

1

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

于 2013-02-21T17:54:09.470 回答
1

除了下面列出的用例之外,还有其他用例,但我将经常出现的一般用例放入其中。

onOptionsItemSelected

如果您正在使用Fragments,您可能想要使用onOptionsItemSelected并考虑将菜单项添加到操作栏,如将项目添加到操作栏中所述的方式。

这描述的是你的Fragment. 要做到这一点,您必须在 中调用setHasOptionsMenuonCreate

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,当您不想使用上面的 pre-ready 方法并实现自己的时使用。

我的意思是你在接口中实现 OnMenuItemClickListener和生成方法。然后,您分配菜单来调用Activity实现 this 的菜单,因为上面的选项根据to关系Activity的预先准备好的实现假定要使用什么。ActivityFragment

于 2013-02-21T18:07:12.270 回答