2010-08-09 88 views
6

我在我的android應用程序中有一個tabview,帶有3個選項卡。這些標籤都工作正常。在Android中捕獲選項卡單擊事件Tabview

現在我想在點擊當前活動選項卡的標籤(位於頂部)時執行一些額外的邏輯。

下面是一個例子:

在我的標籤之一,我提供了用戶在不同的順序理清一個選項。當按下當前活動選項卡的選項卡時,我想重置所有這些排序。

是否有可能捕捉tabview中的標籤點擊事件並執行一些額外的邏輯?

修改:爲清晰起見進行了編輯。

+0

'TabHost.OnTabChangeListener' – st0le 2010-08-09 06:59:22

+1

僅當選項卡更改時,TabHost.onTabChangeListener纔會被觸發。但是我希望事件被解僱,即使點擊當前活動選項卡的標籤標題。 有沒有可能這樣做? – Sudar 2010-08-15 12:23:32

回答

4

這是你的代碼應該是如何工作的:

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

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

     } 
}); 
+0

謝謝,此代碼有效。但它引入了一個新問題。現在,標籤在點擊時不會被切換。我是否需要調用其他方法來更改標籤? – Sudar 2010-12-03 09:23:54

+0

我正在努力解決這個問題......迄今爲止,如果不實施您自己的「切換」代碼,我沒有答案。如果你成功,請分享:) http://stackoverflow.com/questions/4337514/android-tabwidget-detect-click-on-current-tab – 0m4r 2010-12-03 10:21:02

+0

Vikas顯示修復,使製表符切換。在監聽器內部添加:getTabHost()。setCurrentTab(getTabHost()。getCurrentTab());或者,如果getCurrentTab()出現問題,請使用標籤索引在偵聽器外部創建最終的int,然後使用它。 – Niels 2012-12-17 15:32:15

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

我發現一個乾淨,簡單的解決方案爲選定的選項卡

步驟檢測點擊:

1:在擴展TabActivity您類。 2:在的onResume()方法執行以下的方法

對於每個選項卡(ⅰ)實現此:

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

因爲我們總是有翼片的一個固定數目的,單獨執行它是沒有問題的。

+0

你是指活動的onResume()方法嗎?如果你能展示一個完整的例子,它也會很有幫助。 – Sudar 2012-08-15 12:46:12

+0

@ Sudar ..我增加了額外的代碼...希望可以幫助你 – Vikas 2012-08-17 23:57:09

相關問題