我看到可以点击iconmenù项目或实施
onOptionsItemSelected
在活动中,或使用
onMenuItemClickListener
像按钮上的onclick监听器一样。何时更好地使用第一种方法,何时第二种方法?
因为对我来说,使用外部监听器会使代码更加模块化,但是创建一个新类,但是使用第一种方法不会创建新类,但会使代码更少模块化......
答案 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
,因为上述选项会根据Activity
到Activity
的预先准备好的实现假设Fragment
要使用的内容关系。