2012-02-21 3 views
8

Я пытаюсь получить событие Click при нажатии на текущую выбранную вкладку моего TabActivity.как обнаружить щелчок по уже выбранной вкладке

Я пробовал под кодом, но когда я нажимаю на одну вкладку, другие вкладки не работают/щелкают правильно.

setupTab(new TextView(this), "Map"); 
    setupTab(new TextView(this), "Attacks"); 
    setupTab(new TextView(this), "Profile"); 
    setupTab(new TextView(this), "Headquater"); 

    int numberOfTabs = tabHost.getTabWidget().getChildCount(); 
    for(int t=0; t<numberOfTabs; t++){ 
    getTabWidget().getChildAt(t).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if(tabHost.getCurrentTab() == 0){ 
        Toast.makeText(TabContext, ""+"i m in on clickkkkk" ,1500).show(); 
        getTabHost().setCurrentTab(0); 
       } 
       if(tabHost.getCurrentTab() == 1){ 
        Toast.makeText(TabContext, ""+"i m in on clickkkkk....$#@$#$" ,1500).show(); 
        getTabHost().setCurrentTab(1); 
       } 

      } 
     }); 
    } 

ответ

9

мне нужно, чтобы обнаружить второй щелчок только для одной вкладки, так this answer работал для меня. Трюк устанавливает OnClick для ребенка, а не для самого TabHost.

getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.i("TAG", "Clicked tab : "+getTabHost().getCurrentTabTag()); 
     tabHost.setCurrentTab(0);          
    } 
}); 
+0

Это работает отлично, даже для сложного tabhost/фрагментов. Благодаря! – MacD

1

Внутри вашего OnCreate метод:

for(int i = 0; i < TOTAL_TAB; i++) { 
    tabHost.getTabWidget().getChildAt(i).setOnTouchListener(this); 
    tabHost.getTabWidget().getChildAt(i).setTag(i+""); 
} 

ваш слушатель:
@Override

public boolean onTouch(View v, MotionEvent event) { 
    if(MotionEvent.ACTION_DOWN == event.getAction()) { 
     previousTab = tabHost.getCurrentTab(); 
     currentTab = Integer.parseInt((String)v.getTag()); 
     if(previousTab == currentTab) { 
      if(currentTab == 0){ 
       Log.i("log", "0th same tab selected"); 
      }else if(currentTab == 1){ 
       Log.i("log", "1st same tab selected"); 
      }else if(currentTab == 2){ 
       Log.i("log", "2nd same tab selected"); 
      }else if(currentTab == 3){ 
       Log.i("log", "3rd same tab selected"); 
      } 
      return true; 
     } 
    } 
    return false; 
} 
+1

и да TabHost tabHost = getTabHost(); –

3

я использовал theczechse nsation решение, но с небольшими изменениями, поскольку добавление слушателя к ребенку, а не к самой закладке хосту вызовет путаницу tabhost слушателя читать комментарии в коде для лучшей классификации

mTabHost.getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // re enforce selecting targeted tab to re apply main listener to default behaviour 
       mTabHost.setCurrentTab(0); 
       // display current tab tag in console 
       Log.i("MainActivity", "Clicked tab : "+mTabHost.getCurrentTabTag()); 
       // identify targeted fragment 
       Fragment currentFragment = new "FragmentClassName"(); 
       // execute navigation (fragment transaction) 
       fragmentManager.beginTransaction() 
         .replace(R.id.content_frame, currentFragment) 
         .commit(); 
       // re enforce selecting targeted tab to re apply main listener to default behaviour 
       mTabHost.setCurrentTab(0); 
      } 
     }); 
Смежные вопросы