选项卡上的OnClickListener不起作用

时间:2009-06-30 08:42:11

标签: android onclick android-tabhost

问候,

我在点击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 个答案:

答案 0 :(得分:19)

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

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

  • TabHost
    • TabWidget
      • (tab)
      • (制表符)
    • 的FrameLayout

通过调用: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 );
        }
    }
});

答案 1 :(得分: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());
      }     
});  

答案 2 :(得分:2)

你的条款错了,使用:

...

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

...

答案 3 :(得分:0)

  

进入我的代码,它显示了一些错误并要求我创建新的方法   那些名字,如getTabWidget(),getTabHost()等。等待你的   响应。

试试这个

 tabHost.getTabHost().setCurrentTab(myTabIndex);