[英]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.