有没有任何方式与股票Android TabHost防止发生标签变化?防止TabHost选项卡更改?
在iOS中,在tabBarController上有一个名为shouldSelectViewController的委托回调,如果返回FALSE,则会阻止发生选项卡更改。
Android有一个onTabChanged()委托,但这看起来是事后通知的选项卡更改已发生(它返回void)。
谢谢。
有没有任何方式与股票Android TabHost防止发生标签变化?防止TabHost选项卡更改?
在iOS中,在tabBarController上有一个名为shouldSelectViewController的委托回调,如果返回FALSE,则会阻止发生选项卡更改。
Android有一个onTabChanged()委托,但这看起来是事后通知的选项卡更改已发生(它返回void)。
谢谢。
如果你想防止标签更改,比如你总是希望的标签是标签0,试试这个代码:
if (tabId.equals("Tab 1")) {
// This will switch tab 1 to tab 0 immediately so that it seems like tab 0 does not change
getTabHost().setCurrentTab(0);
}
如果你不想使用onTabChanged()来,您可以为每个选项卡设置OnClickListener/OnTouchListener并在此处执行此操作。例如:
for(int i=0; i<tabWidget.getTabCount(); i++) {
tabWidget.getChildAt(i).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
String currentTabTag = (String) tabHost.getCurrentTabTag();
String clickedTabTag = (String) v.getTag();
if(clickedTabTag.equals("BAD TAG")) {
return true; // Prevents from clicking
}
}
return false;
}
});
}
两个注意事项 - 您需要指定一个标签,因为“v”没有引用创建的tabSpec,它是视图中的布局。还必须声明@override。毕竟这不起作用,因为选项卡控件已经将新选项卡着色为橙色,并且看起来很糟糕。即使使其无效也无济于事。任何其他想法? – Paul 2012-06-25 19:58:44