我看到可以处理对图标菜单项的点击或通过实现
onOptionsItemSelected
在活动内部,或通过使用
onMenuItemClickListener
就像按钮上的 onclick 监听器。什么时候最好使用第一种方法,什么时候使用第二种方法?因为在我看来,使用外部侦听器会使代码更加模块化,但是会创建一个新类,但使用第一种方式不会创建新类,而是会使代码模块化程度降低......
如果您的目标是 API 14 或更高版本(ICS 或更高版本),您可以实现一个ActionProvider。如果这不是一个选项,那么您可以实现一个基本活动,该活动将始终填充菜单并使用onOptionsItemSelected
. 这是通过所有活动实现“关于”或“设置”菜单项的好方法。
除了下面列出的用例之外,还有其他用例,但我将经常出现的一般用例放入其中。
onOptionsItemSelected
如果您正在使用Fragment
s,您可能想要使用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
的预先准备好的实现假定要使用什么。Activity
Fragment