簡體   English   中英

保持活動之間的狀態

[英]Maintain state between activities

我的應用程序有兩個活動: MasterActivityDetailActivity MasterActivity具有兩種可視化模式: 列表模式地圖模式 操作欄項目在它們之間切換。

當用戶進入DetailActivity並返回時,我想DetailActivity選定的可視化模式。 在開始時,我使用了SharedPreferences但是即使在設備啟動或長時間不活動之后,用戶也將恢復以前的可視化模式,這不是我的意思。

然后,我切換到BundleonSaveInstanceState但是,當用戶單擊DetailActivity后退按鈕時, onCreateBundle始終為空,因此我無法還原以前的可視化模式,並且始終恢復為列表模式。

應用使用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所以你需要創建了。 請點擊鏈接獲取詳細信息。

我有兩種方法。 基本相同,但是存儲數據的方式不同

  1. 使用Singleton
  2. 保持您的sharedprefs模型sharedprefs

在這兩種情況下,都必須刪除Activity's onDestroy方法上的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM