【问题标题】:Why this code does not save current tab state?为什么此代码不保存当前选项卡状态?
【发布时间】:2011-05-31 04:14:42
【问题描述】:

我需要将当前标签保存在我的标签活动中。当我例如在标签 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();
}

【问题讨论】:

    标签: android


    【解决方案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));
    }
    

    【讨论】:

      【解决方案2】:

      这看起来很奇怪?

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

      【讨论】:

      猜你喜欢
      • 2021-07-03
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2019-11-29
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多