始终调用onTabChanged(first_page),这是预期的行为吗?

时间:2011-07-29 01:33:57

标签: android android-tabhost tabactivity

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

现在我的解决方案和问题是:

  • 这是预期的行为吗?
  • 有没有更好的解决方案?

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

我们没有代码,所以很难说出确切的原因,但你最有可能也会在创建时调用setCurrentTab。当您返回活动时,首先调用onCreate方法中的setCurrentTab,然后调用onResume方法中的setCurrentTab。

如果这不是问题,你将不得不分享一些代码来帮助。

实际上,您应该始终共享相关的代码部分,否则很难找到真正的问题。