我的应用有两项活动:MasterActivity
和DetailActivity
。
MasterActivity
有两种可视化模式:列表模式和地图模式。操作栏项目在它们之间切换。
当用户进入DetailActivity
并返回时,我想保留所选的可视化模式。在开始时我使用了SharedPreferences
,但是即使在设备启动或长时间不活动时,用户也会恢复他之前的可视化模式,这不是我的意思。
然后我切换到Bundle
和onSaveInstanceState
但是,当用户点击DetailActivity
的后退按钮时,onCreate
的{{1}}始终为空,所以我无法恢复以前的可视化模式,它始终会恢复到列表中。
应用使用Bundle
,Toolbar
配置如下:
AndroidManifest.xml
答案 0 :(得分:0)
不确定为什么onSaveInstanceState
不适合您。你的代码就像:
class MasterActivity extends Activity {
private int mode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
mode = savedInstanceState.getInt("mode");
}
@Override
protected void onResume() {
super.onResume();
if(mode == 1) {
//list mode
} else {
// map mode
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("mode", mode);
}
}
尽管如此,请考虑使用Androjeta框架(由我维护)。它带有许多功能,包括@Retain
,你可以在你的情况下使用它们:
class MasterActivity extends BaseActivity {
@Retain
int mode;
@Override
protected void onResume() {
super.onResume();
if(mode == 1) {
//list mode
} else {
// map mode
}
}
}
请注意,此处MasterActivity
从BaseActivity
延伸,因此您也需要创建它。请点击链接了解详情。
答案 1 :(得分:0)
我有两种方法。它基本相同,但存储数据的方式不同
Singleton
sharedprefs
型号原样在两种情况下,删除Activity's onDestroy
方法上的值。