【问题标题】:Capturing the tab click event in Android Tabview在 Android Tabview 中捕获选项卡单击事件
【发布时间】:2011-03-27 03:06:59
【问题描述】:

我的 android 应用中有一个带有 3 个标签的标签视图。选项卡都工作正常。

现在我想在单击当前活动选项卡的选项卡(顶部)时执行一些额外的逻辑。

这是一个例子:

在我的一个选项卡中,我为用户提供了一个选项,可以按不同的顺序对事物进行排序。当按下当前活动标签的标签时,我想重置所有这些排序。

是否可以在tabview中捕获tab点击事件并执行一些额外的逻辑?

编辑:为清楚起见进行了编辑。

【问题讨论】:

  • TabHost.OnTabChangeListener
  • TabHost.onTabChangeListener 仅在选项卡更改时才会被触发。但我希望触发事件,即使单击当前活动选项卡的选项卡标题也是如此。有可能吗?

标签: android tabs


【解决方案1】:

这就是你的代码应该如何工作的:

getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        //do whatever you need

        }
});

【讨论】:

  • 谢谢,此代码有效。但它引入了一个新问题。现在,单击选项卡时不会切换选项卡。我是否必须调用任何其他方法来更改选项卡?
  • 我也在努力解决这个问题......到目前为止,如果不实现你自己的“切换”代码,我没有答案。如果你成功请分享:) stackoverflow.com/questions/4337514/…
  • Vikas 显示了使选项卡切换的修复程序。在监听器内添加: getTabHost().setCurrentTab(getTabHost().getCurrentTab());或者,如果 getCurrentTab() 出现问题,请在侦听器之外创建一个带有选项卡索引的最终 int,然后改用它。
【解决方案2】:

如果您一直在寻找解决方案,我可能已经找到了。 看这里:Android TabWidget detect click on current tab

【讨论】:

    【解决方案3】:

    我找到了一种干净且简单的解决方案,用于检测选定选项卡上的点击

    步骤:

    1:在您的班级中扩展 TabActivity。 2:在onResume()方法中实现如下方法

    对于每个选项卡 (i) 执行此操作:

    TabHost tabHost = getTabHost();
    
    public void onResume() {
    
     super.onResume();
         tabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
    
                    public void onClick(View v) {
                       count++;
                       tabHost.setCurrentTab(0);
        //based on your count value..you can do anything...like going back to homepage...
        //    similar thing exist on iphone (double tab a tab..it takes back to homepage)
         }
       });
     }      
    

    由于我们总是有固定数量的选项卡,因此单独实现它不是问题。

    【讨论】:

    • 你的意思是activity的onResume()方法吗?如果你能展示一个完整的例子,这也会很有帮助。
    【解决方案4】:
        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
        {
            getTabWidget().getChildAt(i).setOnClickListener(new OnClickListener() { 
    
                @Override 
                public void onClick(View v) { 
    
                    if (getTabHost().getCurrentTabTag().equals(v.getTag()))
                    {
                        int nextTab = getTabHost().getCurrentTab();
                        tabHost.setCurrentTab(prevTab);
                        tabHost.setCurrentTab(nextTab);
                        prevTab = nextTab;
                    }
                    else
                        tabHost.setCurrentTabByTag((String) v.getTag());
                } 
            });
        }
    

    你需要一个全局变量;

        private int prevTab = 1;   //any tab except the initial one.
    

    此代码对我有用。有点难看的是你必须为选项卡和视图设置相同的标签 例如;

        intent = new Intent().setClass(this, AnaSayfa.class);
        spec = tabHost.newTabSpec("firstTab").setIndicator(makeTabIndicator(R.drawable.firstTab, "First Tab" , "firstTab"))
                      .setContent(intent);
        tabHost.addTab(spec);
    

    而makeTabIndicator方法就是这样,

        private View makeTabIndicator(int drawable, String text, String viewTag){ 
    
            View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);
    
            ImageView image = (ImageView) view.findViewById(R.id.imageView1);       
            image.setImageResource(drawable);
            image.setAdjustViewBounds(true);
    
            TextView tv = (TextView) view.findViewById(R.id.textView1);
            tv.setText(text);
    
            view.setTag(viewTag);               
            return view;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2021-10-10
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多