9

Можно ли удалить/восстановить панель вкладок из панели действий динамически?Android ActionBar: показывать/скрывать вкладки динамически?

До сих пор я делал это, изменяя режим навигации панели действий. Я использовал следующий код для удаления и восстановления вкладки:

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

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

Это работает, но есть большая проблема: Everytime я называю setNavigationMode, onTabSelected вызывается в TabListener и вкладке в настоящее время пересоздалась открытая компанией.

ответ

1

Это работает по назначению, поскольку вкладка выбирается, потому что она не отображается. Я предлагаю вам сделать свой собственный элемент управления в TabListener.

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(); 
} 
4

Чтобы удалить вкладки ActionBar динамически, вам просто необходимо:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 

Чтобы добавить их на лету, просто сделать:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

Во втором случае, предположение что после установки режима навигации вы также добавите вкладки в панель действий, аналогичные этому:

for (int resourceId : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(resourceId) 
       .setTabListener(this)); 
} 
Смежные вопросы