我需要在我的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();
}
答案 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);
}