我还没有测试过这个方法 - 这将取决于你,但它应该给你一个关于如何处理你的问题的大致想法。
有三个步骤:
第一步
我们需要一个可以为我们处理启用/禁用操作的东西。为此,我们创建以下类:
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 ) {
}
@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 ) {
}
}
最后
我们现在可以使用我们创建的框架了。为此,我们需要一个TabHolder
:
tabHolder = new TabHolder()
我们需要将我们的Tabs
添加到这里:
tabHolder.addTab( new TabItem( tab, fragmentForThisTab ) );
我们需要在每个标签上设置自定义的TabListener
:
tab.setTabListener( new MyTabListener() );
启用/禁用
要启用或禁用一个选项卡
,我们只需调用:
tabHolder.getTab( position ).toggleEnabled();
让我知道进展如何 :)