OnClickListener的标签不工作 [英] OnClickListener on Tabs not working

查看:128
本文介绍了OnClickListener的标签不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问候,

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

我是注册的错误观点?

另外,我无法创建一个上下文菜单标签,不仅是因为它的内容,这方面的问题有关?

 公共类TestDroidViewTab扩展TabActivity
                              实现TabContentFactory
                              ,OnTabChangeListener,OnClickListener {

  私有静态最后弦乐LOG_KEY =TEST;
  ListView控件的ListView;
  @覆盖
  保护无效的onCreate(包savedInstanceState){
      super.onCreate(savedInstanceState);
      最终TabHost tabHost = getTabHost();


      TabHost.TabSpec TS = tabHost.newTabSpec(ID_1);
      ts.setIndicator(1);
      ts.setContent(本);
      tabHost.addTab(TS);

      TS = tabHost.newTabSpec(ID_2);
      ts.setIndicator(2);
      ts.setContent(本);
      tabHost.addTab(TS);

      TS = tabHost.newTabSpec(ID_3);
      ts.setIndicator(3);
      ts.setContent(本);
      tabHost.addTab(TS);
      tabHost.setOnClickListener(本);
      tabHost.setOnTabChangedListener(本);
  }
  公共无效的onClick(视图v){
      Log.d(LOG_KEY,onclick事件);
  }

  公共无效onTabChanged(字符串tabId){
      Log.d(LOG_KEYOnTabChanged);
  }
 

解决方案

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

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

  • 在TabHost
    • TabWidget
      • (标签)
      • (标签)
    • 的FrameLayout

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

您就可以得到一个处理的各个选项卡调用: getTabWidget()getChildAt(4);

在本质上,你将你的 OnClickListener 的TabWidget的孩子。现在,您可以拿起点击您的个性化标签。然而,这将覆盖一个选项卡时这改变了内容的默认行为。所以,要想让你的内容改变,你的 OnClickListener 将需要为你做的。

下面是一个完整的例子,它可以让你拦截单击事件,并更改选项卡下面的内容:

 最后弦乐myTabTag =我的标签;
最终诠释myTabIndex = 3;

。getTabHost()addTab(getTabHost()newTabSpec(myTabTag));

getTabWidget()。getChildAt(myTabIndex).setOnClickListener(新OnClickListener(){
    @覆盖
    公共无效的onClick(视图v){
        如果(getTabHost()。getCurrentTabTag()。等于(myTabTag)){
            。getTabHost()setCurrentTab(myTabIndex);
        }
    }
});
 

Greetings,

I am trying to get the Click - event when clicking on the currently selected tab of my TabActivity. The onTabChangedHandler is only called whenever the tab is changed, not if the currently active Tab is clicked. The debugger tells me i have the onClickListener Registered for the TabWidget within my TabHost.

Am i registering for the wrong View?

Also, I am unable to create a Context Menu for the Tabs, only for its content, is this problem related?

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

解决方案

If you want to see that a particular tab is clicked, you need to add your listener to the tab itself, not the TabHost.

The hierarchy of views in a tab implementation is:

  • TabHost
    • TabWidget
      • (tab)
      • (tab)
    • FrameLayout

The tabs are added at runtime by calling: tabHost.addTab(tabHost.newTabSpec(""));

You can then get a handle to the individual tabs by calling: getTabWidget().getChildAt(4);

In essence, you are adding your OnClickListener to a child of the TabWidget. You can now pick up the clicks on your individual tab. However, this will override the default behavior which changes the content when a tab is clicked. So, to get your content to change, your OnClickListener will need to do that for you.

Here is a full example, which lets you intercept the click event, and change the content below the tab:

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

这篇关于OnClickListener的标签不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆