【发布时间】:2011-07-29 01:33:57
【问题描述】:
我有带有 3 个标签的 TabActivity。我将最后选择的页码保存到共享
偏好并将其恢复为 onResume 以致电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);
}
}
}
我发现 onTabChanged() 在 onResume() 被调用之前被调用了!当我在调用 tabHost.addTab() 之后移动调用 tabHost.setOnTabChangedListener() 的行时,onTabChanged() 没有从 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);
}
现在我有了我的解决方案,问题是:
- 这是预期的行为吗?
- 有没有更好的解决方案?
感谢您的关注。
【问题讨论】:
-
介意分享
onCreate和onResume方法只标签相关代码? -
@Nikola,是的,我添加了代码片段。
-
您已经修复了吗?还是需要帮助?
-
@Jeroen,正如您在我的问题中看到的那样,我有自己的解决方案,但没有回答我的问题。由于我仍在开发 Android 应用程序,我很高兴知道答案。
-
我有类似的问题,在这里找到了解决方案stackoverflow.com/a/9896017/2596190这可能会有所帮助
标签: android android-tabhost tabactivity