防止 TabHost 切换选项卡?

5

有没有办法使用原始Android TabHost防止选项卡切换发生?

iOS中,有一个名为shouldSelectViewController的代理回调函数,如果你返回FALSE,它将防止选项卡切换。

Android具有一个onTabChanged()代理,但那似乎是一个事后通知,说明选项卡已经被更改了(它返回void)。

谢谢。

2个回答

7
如果您不想使用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

2
如果你想防止标签页改变,例如你总是希望标签页为标签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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接