有沒有任何方式與股票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