为什么此代码不保存当前选项卡状态?

时间:2011-02-11 12:21:40

标签: android

我需要在我的tabactivity中保存当前标签。当我是在tab nr 3上,如果打开对话框,然后按下后退按钮,它会将我带回tab1。为了解决这个问题,我尝试创建int currentPos,我在onSaveInstanceState()/ onPause中传递getCurrentTab()并在onResume()方法中使用setCurrenttab(currentPos)读取它,但它不起作用:(  我试图将currentPost更改为static - 然后它可以正常工作但是我认为这是一种丑陋的方式; / 我非常感谢任何帮助

protected void onSaveInstanceState(Bundle outState) {   
    super.onSaveInstanceState(outState);
    saveState();
    outState.putInt(CURRENT_TAB, getTabHost().getCurrentTab());
}

protected void onRestoreInstanceState(Bundle savedInstanceState){
    currentTab = (savedInstanceState ==null) ? currentTab=0 :
           savedInstanceState.getInt(CURRENT_TAB);
    if(currentTab >=0){
        getTabHost().setCurrentTab(currentTab);
    }
}
protected void onPause() {
    super.onPause();    
    saveState();
}
protected void onResume() {
    super.onResume();   
    getTabHost().setCurrentTab(currentTab);     
}   
private void saveState(){
    currentTab=getTabHost().getCurrentTab();
}

2 个答案:

答案 0 :(得分:1)

这不是一个直接的答案,但我使用以下想法处理标签:http://developer.android.com/reference/android/app/Activity.html

  

请注意保存很重要    onPause()中的持久数据   代替    onSaveInstanceState(Bundle)因为后者不属于   生命周期回调,所以不会   在所描述的每种情况下都会被呼   在其文档中。

另请参阅http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

例:

@Override
protected void onPause() {
    super.onPause();
    saveCurrentTab(getTabHost().getCurrentTab());
}

private void saveCurrentTab(int value) {
    PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(
            PREF_KEY_CURRENT_TAB, value).commit();
}

@Override
protected void onResume() {
    super.onResume();
    getTabHost().setCurrentTab(
            PreferenceManager.getDefaultSharedPreferences(this)
            .getInt(PREF_KEY_CURRENT_TAB, 0));
}

答案 1 :(得分:1)

这看起来很奇怪?

protected void onSaveInstanceState(Bundle outState) {   
    super.onSaveInstanceState(outState);
    saveState();
    outState.putInt(CURRENT_TAB, getTabHost().getCurrentTab());
}

你正在呼叫父母onSaveInstanceState(完成工作),然后你调用一个函数savestate()来设置你添加到outstate Bundle的var。但是在我认为之后你从未真正对Bundle做过什么。你不应该像父母那样打电话给父母吗?

protected void onSaveInstanceState(Bundle outState) {   
    saveState();
    outState.putInt(CURRENT_TAB, getTabHost().getCurrentTab());
    super.onSaveInstanceState(outState);
}