在我正在处理的应用程序上,我需要一个上下文菜单来显示用户是否在选项卡上执行longClick,这将允许他们关闭选项卡。我似乎无法找到一种方法来向标签添加一个监听器。我要么需要每个选项卡都有自己的监听器,要么监听器需要能够告诉哪个选项卡在其上执行了longClick,因为它并不总是活动选项卡。
有什么想法吗?
答案 0 :(得分:1)
TabWidget
与任何其他视图一样;您应该可以通过OnLongClickListener
向其注册myTabWidget.setOnClickListener
并使用View
OnLongClickListener.onLongClick(View v)
参数来确定点击了哪个标签。
使用TabSpec
使用TabHost为每个选项卡注册指示符时,如果传入的资源具有关联ID,则应该能够使用该ID查找选项卡本身。这可能意味着您必须开始使用View
或布局作为TabSpec.setContent
或TabSpec.setIndicator
参数(如果您尚未使用),以便稍后通过ID查找它们。 / p>
答案 1 :(得分:1)
我感谢您接受了答案,但如果您想利用内置ContextMenu
功能而非onLongClickListeners
本身设置TabWidget
,则可以按以下方式执行此操作...
示例,我当前的TabActivity
在for
循环中添加了标签,并为每个上下文菜单注册我执行以下操作。
for (int tabNumber = 1; tabNumber < 8; tabNumber++) {
...
spec = tabHost.newTabSpec(tag).setIndicator(indicator).setContent(intent);
tabHost.addTab(spec);
View v = tabWidget.getChildAt(tabNumber - 1);
registerForContextMenu(v);
...
}
然后在我的Activity
中,我只是覆盖onCreateContextMenu(...)
和onContextItemSelected (MenuItem item)
@Override
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenuInfo menuInfo) {
...
// The parameter v is the actual tab view and not the TabWidget
// this makes it easy to get the indicator text or its tag in order
// to easily identify which tab was long-clicked and build the menu
...
}
@Override
public boolean onContextItemSelected (MenuItem item) {
...
// Process selected item here
...
}
没有必要明确地为任何视图设置OnLongClickListener
,因为这是通过调用registerForContextMenu(...)
来完成的。此外,ContextMenu
创建和选择处理都是由ContextMenu
公开的Activity
方法为您处理的。
除非您需要自己处理所有这些内容(例如,对于自定义上下文菜单布局),否则使用Activity
中的内容似乎更容易。