捕获Android Tabview中的标签点击事件

时间:2010-08-09 04:52:56

标签: android tabs

我的Android应用中有一个tabview,带有3个标签。标签都运行正常。

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

以下是一个例子:

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

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

编辑:为了清晰而编辑。

4 个答案:

答案 0 :(得分:4)

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

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

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

        }
});

答案 1 :(得分:3)

如果你想要寻找解决方案,我可能会找到一个解决方案。 看看这里:Android TabWidget detect click on current tab

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

由于我们总是有固定数量的标签,因此单独实施它不是问题。

答案 3 :(得分:0)

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