Я не проверял это - это будет зависеть от вас, но это должно дать вам общее представление о том, как вы можете решить вашу проблему.
Есть три шага:
Первый шаг
Нам нужно что-то, что может обработать действие включения / выключения для нас. Для этого мы создаем следующий класс:
public class TabItem {
private Tab tab;
private Fragment fragment;
private boolean enabled;
public TabItem( Tab tab, Fragment fragment ) {
this.tab = tab;
this.fragment = fragment;
enabled = true;
}
public Tab getTab() {
return tab;
}
public Fragment getFragment() {
return fragment;
}
public void toggleEnabled() {
enabled = enabled ? false : true;
}
public boolean isEnabled() {
return enabled;
}
}
Второй шаг
Нам нужно что-то, что может содержать эти TabItems
, и простой способ получить к ним доступ. Для этого добавим следующий класс:
public class TabHolder {
private HashMap<Integer, TabItem> tabs;
public TabHolder() {
tabs = new HashMap<Integer, TabItem>();
}
public void addTab( TabItem tab ) {
tabs.put( tab.getTab().getPosition(), tab );
}
public TabItem getTab( int position ) {
return tabs.get( position );
}
}
Третий шаг
Нам нужно обработать выбор Tabs
самим, поэтому нам нужно создать пользовательский TabListener
:
private class MyTabListener implements TabListener {
@Override
public void onTabReselected( Tab tab, FragmentTransaction ft ) {
//Do nothing - unless you want to do something.
}
@Override
public void onTabSelected( Tab tab, FragmentTransaction ft ) {
TabItem item = tabHolder.getTab( tab.getPosition() );
if( item.isEnabled() ) {
ft.remove( item.getFragment() );
ft.commit();
}
}
@Override
public void onTabUnselected( Tab tab, FragmentTransaction ft ) {
//Do nothing - unless you want to do something.
}
}
Наконец
Теперь мы можем использовать нашу созданную платформу. Для этого нам понадобится TabHolder
:
tabHolder = new TabHolder(); //Needs to be declared in the same class as our TabListener
Нам нужно добавить Tabs
к этому:
tabHolder.addTab( new TabItem( tab, fragmentForThisTab ) );
И нам нужно установить наш пользовательский TabListener
на каждом Tab
:
tab.setTabListener( new MyTabListener() );
Включение / отключение
Чтобы включить или отключить Tab
, мы просто вызываем:
tabHolder.getTab( position ).toggleEnabled();
Дайте мне знать, как оно идет:)