我非常需要允许用户在长按可更改的选项卡主机(确切地说是选项卡名称,而不是选项卡主体内部的某个位置)后执行某些操作。经过大量搜索和我自己的试验,我找到了一个可行的解决方案,以及正常的 onClick。
我还需要存储当前单击的选项卡的选项卡标题(可能在许多情况下需要它)。
我非常需要允许用户在长按可更改的选项卡主机(确切地说是选项卡名称,而不是选项卡主体内部的某个位置)后执行某些操作。经过大量搜索和我自己的试验,我找到了一个可行的解决方案,以及正常的 onClick。
我还需要存储当前单击的选项卡的选项卡标题(可能在许多情况下需要它)。
在我们的 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;
}
}