我有两个标签,例如Tab1& Tab2显示在屏幕上。让标签显示在肖像方向上。
Tab1显示Activity1& Tab2显示Activity2。
目前,选定的选项卡状态为Tab2。现在,我将PORTRAIT的方向更改为LANDSCAPE。在将方向更改为LANDSCAPE模式时,不显示Tab2,而是显示当前的Tab1。
基本上,我想在方向改变时保存Tab状态。
为了执行保存选项卡状态的目的,我正在编写以下代码:
protected void onPause() {
super.onPause();
saveCurrentTabState(getSelectedTab());
}
private void saveCurrentTabState(int value) {
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(
"tabState", value).commit();
}
@Override
protected void onResume() {
super.onResume();
setCurrentTab(PreferenceManager.getDefaultSharedPreferences(this)
.getInt("tabState", 0));
}
我想知道,我的方法是否正确&以上代码是否是在更改方向时保存选项卡状态的正确方法。
答案 0 :(得分:17)
这不是它应该做的方式......而是使用:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tabState", getSelectedTab());
}
然后,在onCreate
方法:
public void onCreate(Bundle state){
// do the normal onCreate stuff here... then:
if( state != null ){
setCurrentTab(state.getInt("tabState"));
}
}
Robby的解决方案也可以使用onRetainNonConfigurationInstance
方法。我实际上喜欢并喜欢onSaveInstanceState
以上的方法,因为它允许您保存代表应用状态的复杂对象,而不仅仅是Bundle
内的parceable。
那么何时使用其中一个?这取决于您保存/恢复应用程序状态所需的数据。对于像保存选项卡状态这样的简单事情,它几乎是一样的。
答案 1 :(得分:2)
这不是最好的方式。您应该使用onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()来保持配置更改之间的状态。这些方法专门用于在配置更改期间保存状态。
public Object onRetainNonConfigurationInstance() {
return mTabHost.getCurrentTab();
}
public void onCreate() {
...
Integer lastTab = (Integer) getLastNonConfigurationInstance();
if(lastTab != null) {
mTabHost.setCurrentTab(lastTab);
}
...
}