我的项目中有10-15个活动。我希望在大多数活动中都有选项菜单。那么,有没有一种方法可以在一个地方完成这个任务,并使其在所有活动中显示?
此外,我想在某些活动中隐藏选项菜单。那么,这是否可能,还是我必须在所有活动中编写选项菜单代码?
敬礼
Sunil
onCreateOptionsMenu
和 onOptionsItemSelected
函数。public class BaseActivity extends Activity {
// Activity code here
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item:
// do what you want here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
现在,在其他15-16个活动中,您应该扩展 BaseActivity,而不是扩展一个Activity。
public class FooActivity extends BaseActivity {
// Activity code here
}
这样,您所有的活动都会派生出选项菜单。对于您想要禁用选项菜单的活动,您可以在该特定活动中再次覆盖它。
public class BarActivity extends BaseActivity {
// Activity code here
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Do Nothing
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Do Nothing
}
}
希望它不会在清单文件中给你带来问题。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_home_page, menu);
menu.removeItem(R.id.logout);
return true;
}
inflate
调用添加它。它需要两个参数:XML资源(与您在原始活动中使用的相同),以及传递到onCreateOptionsMenu
方法中的菜单对象。
menu.removeItem
将删除您传递给它的任何资源ID的菜单项。希望这可以帮助那些面临此问题的人。仅仅扩展BaseActivity
是不够的,你还必须在其他活动中像这样调用super.onCreateOptionsMenu(menu)
和super.onOptionsItemSelected(item)
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//getMenuInflater().inflate(R.menu.menu_second, menu); <- remove this
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}