Search code examples
androidlistenerandroid-tabhosttabwidget

Android TabWidget detect click on current tab


I am trying to find way to be able to fire an onclick event on a tab when this tab is the current tab.

I did try this way (among several other) with no success thou.

public void onTabChanged(String tabId) {
    Log.d(this.getClass().getName(), ">>>>>>>>>>>>>>>>>>>>>>>> tabId: " + tabId);

    int tabs = getTabWidget().getChildCount();
    Log.d(this.getClass().getName(), "tabs: " + tabs);
    for(int i=0; i<tabs; i++){
        View tab = getTabWidget().getChildAt(i);
        if(i==tabHost.getCurrentTab()){
            Log.d(this.getClass().getName(), "tab: " + i);
            tab.setOnClickListener(this);
        }else{
            tab.setOnClickListener(null);
            tab.getOnFocusChangeListener();
        }
    }   
}

the point is that I set the onClickListener to null so, the next time I click on a tab nothing happens, but I would like to have the normal tab behavior.

Any idea there outside?


Solution

  • I think I have found a solution, here follows a sample code:

        intent = new Intent(this, HomeGroup.class);
        View tab1 = _inflater.inflate(R.layout.custom_tab_1,null);
        homeTab.setTag("Tab1");
        spec = tabHost.newTabSpec("Tab1").setIndicator(tab1).setContent(intent);
        tabHost.addTab(spec);
    
        View tab2 = _inflater.inflate(R.layout.custom_tab_2,null);
        homeTab.setTag("Tab2");
        spec = tabHost.newTabSpec("Tab2").setIndicator(tab2).setContent(intent);
        tabHost.addTab(spec);
    
        View tab3 = _inflater.inflate(R.layout.custom_tab_3,null);
        homeTab.setTag("Tab3");
        spec = tabHost.newTabSpec("Tab3").setIndicator(tab3).setContent(intent);
        tabHost.addTab(spec);
    
        tabHost.setOnTabChangedListener(this);
    
        //click on seleccted tab
        int numberOfTabs = tabHost.getTabWidget().getChildCount();
        for(int t=0; t<numberOfTabs; t++){
            tabHost.getTabWidget().getChildAt(t).setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(event.getAction()==MotionEvent.ACTION_UP){
    
                        String currentSelectedTag = MainTab.this.getTabHost().getCurrentTabTag();
                        String currentTag = (String)v.getTag();
                        Log.d(this.getClass().getSimpleName(), "currentSelectedTag: " + currentSelectedTag + " currentTag: " + currentTag);
                        if(currentSelectedTag.equalsIgnoreCase(currentTag)){
                            MainTab.this.getTabHost().setCurrentTabByTag(currentTag);
                            String newSelectedTabTag = MainTab.this.getTabHost().getCurrentTabTag();
                            if(newSelectedTabTag.toLowerCase().indexOf("tab1")!=-1){
                                //do smthg
                            }else if(newSelectedTabTag.toLowerCase().indexOf("tab1")!=-1){
                                //do smthg
                            }else if(newSelectedTabTag.toLowerCase().indexOf("tab3")!=-1){
                                //do smthg
                            }
                            return true;
                        }
                    }
                    return false;
                }
            });
        }       
    

    Probably it is possible to improve it, but this does the work for me!