2010-08-09 43 views
6

Tôi có một tabview trong ứng dụng Android của mình với 3 tab. Các tab đều hoạt động tốt.Chụp sự kiện nhấp vào tab trong TabView Android

Bây giờ tôi muốn thực hiện một số logic bổ sung khi tab (trên cùng) của tab hiện đang hoạt động được nhấp.

Dưới đây là một ví dụ:

Trong một trong các tab của tôi, tôi cung cấp một lựa chọn cho người sử dụng để sắp xếp mọi thứ theo thứ tự khác nhau. Khi nhấn tab của tab hiện đang hoạt động, tôi muốn đặt lại tất cả các sắp xếp này.

Có thể chụp sự kiện nhấp chuột tab trong tabview và thực hiện một số logic bổ sung không?

Chỉnh sửa: Được chỉnh sửa để rõ ràng.

+0

'TabHost.OnTabChangeListener' – st0le

+1

TabHost.onTabChangeListener chỉ được kích hoạt khi tab được thay đổi. Nhưng tôi muốn sự kiện được kích hoạt, ngay cả khi tiêu đề tab của tab hiện đang hoạt động được nhấp. Có thể thực hiện điều đó không? – Sudar

Trả lời

4

Đây là cách mã của bạn nên làm việc:

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

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

     } 
}); 
+0

Cảm ơn, mã này hoạt động. Nhưng nó đang giới thiệu một vấn đề mới. Bây giờ các tab không được chuyển đổi khi chúng được nhấp. Tôi có phải gọi bất kỳ phương thức bổ sung nào để làm cho các tab thay đổi không? – Sudar

+0

Tôi đang làm việc để giải quyết vấn đề này ... cho đến nay tôi không có câu trả lời nếu không thực hiện bạn sở hữu mã "chuyển đổi". Nếu bạn thành công vui lòng chia sẻ :) http://stackoverflow.com/questions/4337514/android-tabwidget-detect-click-on-current-tab – 0m4r

+0

Vikas hiển thị bản sửa lỗi để làm cho các tab chuyển đổi. Bên trong listener add: getTabHost(). SetCurrentTab (getTabHost(). GetCurrentTab()); Hoặc nếu getCurrentTab() gây rắc rối, hãy tạo một int cuối cùng với chỉ mục của tab bên ngoài trình lắng nghe và thay vào đó sử dụng chỉ mục đó. – Niels

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

Bạn cần biến toàn cầu;

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

Mã này phù hợp với tôi. Một điều xấu xí là bạn phải đặt cùng một thẻ cho tab và xem Ví dụ;

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

và phương pháp makeTabIndicator là như thế,

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

Tôi tìm thấy một giải pháp làm sạch và dễ dàng cho Phát hiện các nhấp chuột vào Tab chọn

bước:

1: Mở rộng TabActivity tại của bạn lớp học. 2: Trong phương thức onResume() thực hiện các phương pháp sau đây

Đối với mỗi tab (i) thực hiện điều này:

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

Vì chúng ta luôn luôn có một số cố định của các tab, thực hiện nó một cách riêng biệt không phải là một vấn đề .

+0

Bạn có phải là phương thức onResume() của hoạt động không?Ngoài ra nó sẽ hữu ích, nếu bạn có thể hiển thị một ví dụ hoàn chỉnh. – Sudar

+0

@ Sudar..i đã thêm mã phụ ... hy vọng sẽ giúp bạn – Vikas

Các vấn đề liên quan