在TabHost中单击选项卡按钮

时间:2013-02-09 00:10:04

标签: android tabs onclick android-tabhost title

我非常需要允许用户在长按可更改选项卡主机后执行某些操作(完全是选项卡名称,而不是选项卡主体内部的某个位置)。经过大量的搜索和我自己的试验后,我找到了一个可行的解决方案,以及正常的onClick。

我还需要存储当前点击标签的标签标题(可能在很多情况下需要它)。

1 个答案:

答案 0 :(得分:0)

在我们的TabHost创建之后,我们应该这样做:

    // TabHost ourTabHost;
    // ... Create your tab host ...
    // Now on click listener for all of tabs

    TabWidget tw = ourTabHost.getTabWidget();
    int childCount = tw.getChildCount();
    for (int i = 0; i < childCount; i++) {
        View child = (View) tw.getChildAt(i);
        child.setOnLongClickListener(this);
    }

但是有一个奇怪的事情,尽管onClicks工作,现在我们无法使用'child.getTag()'获取选项卡名称。它会给我们NULL(我不完全确切。为什么?)。 所以最终的工作,但不是太漂亮的解决方案将是:

// Your onCreate
// ...

TabHost ourTabHost;

// During creating tabhost
SparseArray<String> TabsIdsTitles = new SparseArray<String>();
int tab_id = 0;
String tabTitle;

/* I have loop here */
tabTitle = whatever_you_need();
TabsIdsTitlte.put(tab_id++, tabTitle);
TabSpec nextTab = ourTabHost.newTabSpec(tabTitle);

// Tab content here

nextTab.setIndicator(tabTitle);
ourTabHost.addTab(nextTab);
/* End of my loop */

// Now on click listener for all of tabs
TabWidget tw = ourTabHost.getTabWidget();
int childCount = tw.getChildCount();
for (int i = 0; i < childCount; i++) {
    View child = (View) tw.getChildAt(i);
    child.setOnLongClickListener(new longClick(PlansForTabs.get(i)) );
}

// Long click listener tabs in TabHost, with their names (tags)
private class longClick implements View.OnLongClickListener {
    String title;
    public longClick(String title) {
        this.title = title;
    }

    @Override
    public boolean onLongClick(View v) {
        // Finally we can do what we want
        return false;
    }
}