其他分享
首页 > 其他分享> > android – 选项卡上的OnClickListener不起作用

android – 选项卡上的OnClickListener不起作用

作者:互联网

问候,

我在点击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");
  }

解决方法:

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

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

> TabHost

> TabWidget

>(标签)
>(标签)

> FrameLayout

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

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

实质上,您将OnClickListener添加到TabWidget的子级.您现在可以获取单个标签上的点击次数.但是,这将覆盖单击选项卡时更改内容的默认行为.因此,要使您的内容发生变化,您的OnClickListener将需要为您执行此操作.

这是一个完整的示例,它允许您拦截click事件,并更改选项卡下面的内容:

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 );
        }
    }
});

标签:android,onclick,android-tabhost
来源: https://codeday.me/bug/20190926/1821914.html