2012-02-21 37 views
8

Tôi đang cố gắng nhận sự kiện Nhấp khi nhấp vào tab hiện đang được chọn trong số TabActivity của mình.cách phát hiện nhấp chuột vào nút tab đã chọn

Tôi đã thử dưới mã nhưng khi tôi nhấp vào một tab, các tab khác không hoạt động/nhấp chuột đúng cách.

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

      } 
     }); 
    } 

Trả lời

9

Tôi cần phát hiện nhấp chuột thứ hai chỉ cho một tab, vì vậy this answer đã hoạt động đối với tôi. Bí quyết là thiết lập OnClick cho đứa trẻ và không cho chính 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

này hoạt động hoàn hảo, ngay cả đối với một tabhost phức tạp/thiết lập đoạn. Cảm ơn! – MacD

1

Bên trong bạn onCreate phương pháp:

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

bạn nghe:
@ 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

và vâng TabHost tabHost = getTabHost(); –

3

tôi đã sử dụng theczechse nsation giải pháp nhưng với những thay đổi nhỏ vì thêm một người biết lắng nghe cho con và không để các máy chủ tab riêng của mình sẽ gây nhầm lẫn cho tabhost nghe để đọc nhận xét trong mã cho phân loại tốt hơn

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); 
      } 
     }); 
Các vấn đề liên quan