8

问候,

我试图在单击我的 TabActivity 的当前选定选项卡时获取 Click - 事件。onTabChangedHandler 仅在选项卡更改时调用,而不是在单击当前活动选项卡时调用。调试器告诉我,我在 TabHost 中为 TabWidget 注册了 onClickListener。

我是否注册了错误的视图?

另外,我无法为选项卡创建上下文菜单,仅针对其内容,这个问题是否相关?

public class TestDroidViewTab extends TabActivity 
                              implements TabContentFactory
                              , OnTabChangeListener, OnClickListener {

  private static final String LOG_KEY = "TEST";
  ListView listView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      final TabHost tabHost = getTabHost();


      TabHost.TabSpec ts = tabHost.newTabSpec("ID_1");
      ts.setIndicator("1"); 
      ts.setContent(this);
      tabHost.addTab(ts);

      ts = tabHost.newTabSpec("ID_2");
      ts.setIndicator("2"); 
      ts.setContent(this);
      tabHost.addTab(ts);

      ts = tabHost.newTabSpec("ID_3");
      ts.setIndicator("3"); 
      ts.setContent(this);
      tabHost.addTab(ts);
      tabHost.setOnClickListener(this);
      tabHost.setOnTabChangedListener(this);
  }
  public void onClick(View v) {
      Log.d(LOG_KEY, "OnClick");
  }

  public void onTabChanged(String tabId) {
      Log.d(LOG_KEY, "OnTabChanged");
  }
4

4 回答 4

19

如果您想查看单击了特定选项卡,则需要将侦听器添加到选项卡本身,而不是 TabHost。

选项卡实现中的视图层次结构是:

  • 标签主机
    • 选项卡小部件
      • (标签)
      • (标签)
    • 框架布局

通过调用在运行时添加选项卡:tabHost.addTab(tabHost.newTabSpec(""));

然后,您可以通过调用来获取各个选项卡的句柄:getTabWidget().getChildAt(4);

本质上,您是将您的添加OnClickListener到 TabWidget 的子项中。您现在可以在您的个人标签上获得点击次数。但是,这将覆盖单击选项卡时更改内容的默认行为。因此,要让您的内容发生变化,您OnClickListener需要为您做到这一点。

这是一个完整的示例,它可以让您拦截点击事件,并更改选项卡下方的内容:

final String myTabTag = "My Tab";
final int myTabIndex = 3;

getTabHost().addTab( getTabHost().newTabSpec(myTabTag) );

getTabWidget().getChildAt(myTabIndex).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getTabHost().getCurrentTabTag().equals(myTabTag)) {
            getTabHost().setCurrentTab(myTabIndex );
        }
    }
});
于 2010-05-21T19:17:11.697 回答
10

使用setOnTabChangedListener而不是OnClickListener;)

    static TabHost tabHost;

    tabHost = getTabHost();


    tabHost.setOnTabChangedListener(new OnTabChangeListener() {
       @Override
      public void onTabChanged(String arg0) {
       Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab());
      }     
});  
于 2010-02-05T01:41:15.797 回答
2

你的条款是错误的,使用:

...

if (getTabHost().getCurrentTabTag().equals(myTabTag) == false) {
            getTabHost().setCurrentTab(myTabIndex );
   }

...

于 2010-06-21T14:34:30.217 回答
0

在我的代码中,它显示了一些错误,并要求我以 getTabWidget()、getTabHost() 等名称创建新方法。等待您的回复。

尝试这个

 tabHost.getTabHost().setCurrentTab(myTabIndex);
于 2013-05-31T09:18:01.453 回答