OnClickListener上的标签不工作(OnClickListener on Tabs not

2019-06-24 12:56发布

问候,

我想获得的点击 - 我TabActivity的当前选择的选项卡上单击时事件。 该onTabChangedHandler只调用时的标签被改变,如果没有当前活动的标签被点击。 调试器告诉我,我有onClickListener注册的TabWidget我TabHost内。

我是注册了错误的看法?

另外,我无法创建上下文菜单的选项卡,只为它的内容,这方面的问题有关?

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

Answer 1:

如果你想看到一个特定的标签被点击时,您需要将您的监听器添加到标签本身,而不是TabHost。

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

  • TabHost
    • TabWidget
      • (标签)
      • (标签)
    • 的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 );
        }
    }
});


Answer 2:

使用setOnTabChangedListener代替OnClickListener

    static TabHost tabHost;

    tabHost = getTabHost();


    tabHost.setOnTabChangedListener(new OnTabChangeListener() {
       @Override
      public void onTabChanged(String arg0) {
       Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab());
      }     
});  


Answer 3:

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

...

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

...



Answer 4:

进入我的代码,它显示了一些错误,并问我创建像getTabWidget(),getTabHost()等。这些名称在等着你反应的新方法。

试试这个

 tabHost.getTabHost().setCurrentTab(myTabIndex);


文章来源: OnClickListener on Tabs not working