将onLongClickListener添加到TabHost android上的选项卡

时间:2012-04-02 22:32:17

标签: java android onlongclicklistener

在我正在处理的应用程序上,我需要一个上下文菜单来显示用户是否在选项卡上执行longClick,这将允许他们关闭选项卡。我似乎无法找到一种方法来向标签添加一个监听器。我要么需要每个选项卡都有自己的监听器,要么监听器需要能够告诉哪个选项卡在其上执行了longClick,因为它并不总是活动选项卡。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

TabWidget与任何其他视图一样;您应该可以通过OnLongClickListener向其注册myTabWidget.setOnClickListener并使用View OnLongClickListener.onLongClick(View v)参数来确定点击了哪个标签。

使用TabSpec使用TabHost为每个选项卡注册指示符时,如果传入的资源具有关联ID,则应该能够使用该ID查找选项卡本身。这可能意味着您必须开始使用View或布局作为TabSpec.setContentTabSpec.setIndicator参数(如果您尚未使用),以便稍后通过ID查找它们。 / p>

答案 1 :(得分:1)

我感谢您接受了答案,但如果您想利用内置ContextMenu功能而非onLongClickListeners本身设置TabWidget,则可以按以下方式执行此操作...

示例,我当前的TabActivityfor循环中添加了标签,并为每个上下文菜单注册我执行以下操作。

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中的内容似乎更容易。