[英]Maintain state between activities
我的应用程序有两个活动: MasterActivity
和DetailActivity
。 MasterActivity
具有两种可视化模式: 列表模式和地图模式 。 操作栏项目在它们之间切换。
当用户进入DetailActivity
并返回时,我想DetailActivity
选定的可视化模式。 在开始时,我使用了SharedPreferences
但是即使在设备启动或长时间不活动之后,用户也将恢复以前的可视化模式,这不是我的意思。
然后,我切换到Bundle
和onSaveInstanceState
但是,当用户单击DetailActivity
后退按钮时, onCreate
的Bundle
始终为空,因此我无法还原以前的可视化模式,并且始终恢复为列表模式。
应用使用Toolbar
并且AndroidManifest.xml
的配置如下:
<activity
android:name=".ui.MasterActivity"
android:label="@string/title_activity_master"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.DetailActivity"
android:parentActivityName=".ui.MasterActivity"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="it.returntrue.revalue.ui.MasterActivity" />
</activity>
不知道为什么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
所以你需要创建了。 请点击链接获取详细信息。
我有两种方法。 基本相同,但是存储数据的方式不同
Singleton
sharedprefs
模型sharedprefs
在这两种情况下,都必须删除Activity's onDestroy
方法上的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.