変更可能なタブホスト(タブ本体自体のどこかではなく、正確にタブ名)を長くクリックした後、ユーザーが何かをできるようにする必要がありました。多くの検索と私自身の試行錯誤の後、通常の 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;
}
}