我有TabActivity有3个标签。我将最后选择的页码保存到共享中
首选项并将其恢复为简历以致电tabHost.setCurrentTab()
但是,当选择除第一个之外的其他时,onTabChanged()
被调用两次
页。
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.addTab()之后移动一行调用tabHost.setOnTabChangedListener()时,onCabChanged()没有从onCreate()调用,这似乎是可以理解的。但是,在这种情况下,调用tabHost.setCurrentTab(0)根本不会调用onTabChanged!这是荒唐的。所以我最终得到了这个解决方案。
1)调用tabHost.addTab()后调用tabHost.setOnTabChangedListener。
2)扭曲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 :(得分:0)
我们没有代码,所以很难说出确切的原因,但你最有可能也会在创建时调用setCurrentTab。当您返回活动时,首先调用onCreate方法中的setCurrentTab,然后调用onResume方法中的setCurrentTab。
如果这不是问题,你将不得不分享一些代码来帮助。
实际上,您应该始终共享相关的代码部分,否则很难找到真正的问题。