我有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);
}
現在我有我的解決方案和問題是:
- 這是預期的行爲?
- 有沒有更好的解決方案呢?
感謝您的關注。
介意共享'onCreate'和'onResume'方法只能標籤相關的代碼? –
@尼古拉,是的,我添加了代碼片段。 – Tomcat
你已經修好了嗎?還是需要幫助? – Jeroen