【问题标题】:Add onLongClickListener to tab on TabHost android将 onLongClickListener 添加到 TabHost android 上的选项卡
【发布时间】:2012-04-02 22:32:16
【问题描述】:

在我正在开发的应用程序上,如果用户在选项卡上执行长按,我需要一个上下文菜单来显示,这将允许他们关闭选项卡。不过,我似乎找不到将侦听器添加到选项卡的方法。我需要每个选项卡都有自己的侦听器,或者侦听器需要能够判断哪个选项卡对其执行了 longClick,因为它并不总是活动选项卡。

有什么想法吗?

【问题讨论】:

  • 您的意思是长按选项卡上的任意位置,还是只长按 TabHost 内的选项卡按钮?
  • 最好只在 TabHost 上的按钮上,但如果这不可能,那么标签中的任何地方都是可行的。

标签: java android onlongclicklistener


【解决方案1】:

我感谢您的回答已被接受,但如果您想利用内置的 ContextMenu 功能而不是在 TabWidget 本身上设置 onLongClickListeners,您可以按以下方式执行此操作...

例如,我当前的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 创建和选择处理全部由Activity 公开的ContextMenu 方法为您处理。

除非您需要自己处理所有这些内容(例如自定义上下文菜单布局),否则使用 Activity 内置的内容似乎更容易。

【讨论】:

  • 这真的很容易。如果我想寻找类似的东西,它会为我节省很多时间和精力。现在我知道很多不这样做的方法和一种方法。谢谢
  • @nick:很高兴为您提供帮助。你会认为这么容易做的事情会更明显,但我不得不承认,当我第一次开始使用选项卡式活动时,我花了很长时间才弄清楚。不过值得付出努力。
【解决方案2】:

TabWidget 和其他视图一样是视图;您应该能够通过myTabWidget.setOnClickListener 注册OnLongClickListener 并使用OnLongClickListener.onLongClick(View v)View 参数来确定单击了哪个选项卡。

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

【讨论】:

  • 有道理,我正在查看继承自 Object 的 TabHost.TabSpec 类,但我认为必须有某种方法来获取它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多