Activity菜单机制 (与dialog类似)
Activity有一套机制来实现对菜单的管理,方法如下:
1.public boolean onCreateOptionsMenu(Menu menu)
此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。
返回true则显示该menu,false 则不显示;
(只会在第一次初始化菜单时调用)
2.public boolean onPrepareOptionsMenu(Menu menu)
在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。
同样的, 返回true则显示该menu,false 则不显示;
(可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等,在onCreateOptionsMenu调用之后调用)
3.public void onOptionsMenuClosed(Menu menu)
每次菜单被关闭时调用.
(菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项)
4.public boolean onOptionsItemSelected(MenuItem item)
菜单项被点击时调用,也就是菜单项的监听方法。
使用场景:
随着页面tab的选择页面的改变修改actionbar
代码如下:
public void onTabChanged(String tabId) {
//提示修改actionbar控件
getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
。。。。
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//动态修改actionbar
restoreActionBar(mTabHost.getCurrentTab());
return super.onPrepareOptionsMenu(menu);
}
//真正修改actionbar的代码
public void restoreActionBar(int i) {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
View view = null;
switch (i){
case 0:
view = View.inflate(this,R.layout.ax_main_action_bar,null);
view.findViewById(R.id.main_city_ll).setOnClickListener(this);
break;
case 1:
view = View.inflate(this,R.layout.ax_main_action_bar,null);
view.findViewById(R.id.main_city_ll).setOnClickListener(this);
break;
case 3:
view = View.inflate(this,R.layout.ax_main_action_bar,null);
view.findViewById(R.id.main_city_ll).setOnClickListener(this);
break;
case 4:
TextView tv = new TextView(this);
tv.setText("fadfdas");
view = tv;
break;
}
actionBar.setCustomView(view);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
}