9

是否可以从操作栏中动态删除/恢复标签栏?

到目前为止,我通过更改操作栏的导航模式来做到这一点。我使用以下代码删除和恢复标签栏:

@Override 
public void restoreTabs() {     
    getSupportActionBar()
    .setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    this.supportInvalidateOptionsMenu();
}

@Override
public void removeTabs() {      
    getSupportActionBar()
    .setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    this.supportInvalidateOptionsMenu();
}

这行得通,但有一个大问题:每次我调用setNavigationMode, 时onTabSelected都会在 中调用,TabListener并且会重新创建当前打开的选项卡。

4

3 回答 3

4

要动态删除操作栏选项卡,您只需要:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

要即时添加它们,只需执行以下操作:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

对于第二种情况,假设在设置导航模式后,您还将向操作栏添加选项卡,类似于:

for (int resourceId : tabs) {
        actionBar.addTab(actionBar.newTab().setText(resourceId)
                .setTabListener(this));
}
于 2014-05-22T14:50:16.823 回答
3
public void onDrawerClosed(View view) {
    getActionBar().setTitle(mTitle);
    // calling onPrepareOptionsMenu() to show action bar icons
    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    invalidateOptionsMenu();
}

public void onDrawerOpened(View drawerView) {
    getActionBar().setTitle(mDrawerTitle);
    // calling onPrepareOptionsMenu() to hide action bar icons
    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    invalidateOptionsMenu();
}
于 2014-03-13T12:26:44.347 回答
1

这是按预期工作的,因为选项卡被选中是因为它没有出现。我建议你自己做 TabListener 中的控件。

于 2013-11-26T22:45:58.483 回答