Android - 每个TabHost选项卡的单独ActionBar选项菜单

时间:2014-02-23 18:14:22

标签: android boolean

我正在制作一个网页浏览器,它有四个标签(标签是使用标签主机完成的),我需要为每个标签选择一个单独的选项菜单。 我该怎么做呢?使用布尔值?

谢谢!

修改(标签的工作方式)

TabHost th = (TabHost) findViewById (R.id.tabHost);

    th.setup();
    TabSpec specs = th.newTabSpec("Tab1");
    specs.setContent(R.id.tab1);
    specs.setIndicator("Tab 1");
    th.setCurrentTab(1);
    th.addTab(specs);

1 个答案:

答案 0 :(得分:0)

当用户更改为其他标签页时,您可以使用OnTabChangeListener来获取回调。根据选项卡ID,您可以操作选项菜单。

当您需要更改菜单时,请致电invalidateOptionsMenu()。然后,将调用onCreateOptionsMenu()。然后,您可以膨胀另一个menu.xml。或者,您也可以等待对onPrepareOptionsMenu()的后续调用,并通过setVisible()切换单个菜单项的可见性。

示例: (尚未测试,但应该或多或少)

private static final String TAB_1 = "tab1";
private static final String TAB_2 = "tab2";

private TabHost mTabHost;

private final TabHost.OnTabChangeListener onTabChangedListener = new TabHost.OnTabChangeListener {
    public void onTabChanged(String tabId){
        invalidateOptionsMenu();
    }
};

public void onCreate(Bundle b){
    TabHost mTabHost = (TabHost) findViewById (R.id.tabHost);
    // ...
    mTabHost.setOnTabChangedListener(onTabChangedListener);
    mTabHost.setCurrentTabByTag(TAB_1);
}

public boolean onCreateOptionsMenu(Menu menu){
    final String currentTab = mTabHost.getCurrentTabTag();

    if(TAB_1.equals(currentTab)){
        getMenuInflater().inflate(R.menu.main_tab1.xml, menu);
    } else if(TAB_2.equals(currentTab)){
        getMenuInflater().inflate(R.menu.main_tab2.xml, menu);
    }
}