2011-07-29 26 views
1

我有TabActivity與3個選項卡。我將最後選擇的頁碼保存爲共享
首選項,然後重新將其恢復爲resume。
但是onTabChanged()被選擇以外的第一次
頁被呼叫。onTabChanged(first_page)總是被調用,這是預期的行爲嗎?

  • 調用tabHost.setCurrentTab(0)使得onTabChanged調用一次。這是預料之中的。
  • 調用tabHost.setCurrentTab(1 or above)使onTabChanged調用兩次,指定第一頁和期望的頁面。這不是我所期望的。

我在OS2.3.3上運行它。

這是預期(設計)的行爲? (我喜歡onTabChanged將只一次
防止第一頁不需要處理調用。如果這是設計的行爲,我需要想
一些邏輯忽略到onTabChanged.騷擾呼叫)

編輯

onCreate()中的代碼片段。

tabHost = getTabHost(); 
tabHost.setOnTabChangedListener(new TabChangedListener()); 
TabSpec firstTab = tabHost.newTabSpec("First") 
    .setIndicator(firstButton) 
    .setContent(R.id.first_content); 
tabHost.addTab(firstTab); 
TabSpec secondTab = tabHost.newTabSpec("Second") 
    .setIndicator(secondButton) 
    .setContent(R.id.second_content); 
tabHost.addTab(secondTab); 
TabSpec thirdTab = tabHost.newTabSpec("Third") 
    .setIndicator(thirdButton) 
    .setContent(R.id.third_content); 
tabHost.addTab(thirdTab); 

和onResume()中的代碼。

int tabIndex = PreferenceManager.getDefaultSharedPreferences(this).getInt(ADDRESS_TAB_KEY,0); 
tabHost.setCurrentTab(tabIndex); 

和OnTabChangeListener。

class TabChangedListener implements OnTabChangeListener 
{ 
    public void onTabChanged(String tabId) 
    { 
     Log.d(TAG,"onTabChanged " + tabId); 

     if(tabId.equals("First") == true) 
     { 
      setupView(0); 
     } 
     else if(tabId.equals("Second") == true) 
     { 
      setupView(1); 
     } 
     else if(tabId.equals("Third") == true) 
     { 
      setupView(2); 
     } 
    } 
} 

我發現在調用onResume()之前調用onTabChanged()方法!當我調用tabHost.setOnTabChangedListener()後調用tabHost.setOnTabChangedListener()調用tabHost.addTab()時,onTabChanged()沒有從onCreate()調用,這似乎是可以理解的。但是,在這種情況下,調用tabHost.setCurrentTab(0)根本不會調用onTabChanged!這是荒唐的。所以我結束了這個解決方案。

1)調用tabHost.addTab()後調用tabHost.setOnTabChangedListener。
2)Twisted onResume()代碼如下所示。

int tabIndex = PreferenceManager.getDefaultSharedPreferences(this).getInt(ADDRESS_TAB_KEY,0); 
if(tabIndex == 0) 
{ 
    setupView(0); // setup view since onTabChanged won't be called 
} 
else 
{ 
    tabHost.setCurrentTab(tabIndex); 
} 

現在我有我的解決方案和問題是:

  • 這是預期的行爲?
  • 有沒有更好的解決方案呢?

感謝您的關注。

+0

介意共享'onCreate'和'onResume'方法只能標籤相關的代碼? –

+0

@尼古拉,是的,我添加了代碼片段。 – Tomcat

+0

你已經修好了嗎?還是需要幫助? – Jeroen

回答

0

我們沒有代碼,所以它很難說出確切的原因,但你很可能是從你onCreate調用setCurrentTab。返回活動時,首先調用onCreate方法中的setCurrentTab,然後調用onResume方法中的setCurrentTab。

如果這不是問題,你將不得不分享一些代碼來提供幫助。

實際上,您應該始終共享代碼的相關部分,否則很難找到真正的問題。

+0

我調查了。如果在調用tabHost.addTab之前調用tabHost.setOnTabChangedListener,則會調用onTabChanged。我調用一個tabHost.setCurrentTab,如果索引不爲0,則再次調用onTabChanged。我嘗試編輯我的問題以添加代碼片段。 – Tomcat

相關問題