在活动之间保持状态

时间:2016-05-09 07:54:16

标签: android android-activity android-manifest android-toolbar

我的应用有两项活动:MasterActivityDetailActivityMasterActivity有两种可视化模式:列表模式地图模式。操作栏项目在它们之间切换。

当用户进入DetailActivity并返回时,我想保留所选的可视化模式。在开始时我使用了SharedPreferences,但是即使在设备启动或长时间不活动时,用户也会恢复他之前的可视化模式,这不是我的意思。

然后我切换到BundleonSaveInstanceState但是,当用户点击DetailActivity的后退按钮时,onCreate的{​​{1}}始终为空,所以我无法恢复以前的可视化模式,它始终会恢复到列表中。

应用使用BundleToolbar配置如下:

AndroidManifest.xml

2 个答案:

答案 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
        }
    }
}

请注意,此处MasterActivityBaseActivity延伸,因此您也需要创建它。请点击链接了解详情。

答案 1 :(得分:0)

我有两种方法。它基本相同,但存储数据的方式不同

  1. 使用Singleton
  2. 保持您的sharedprefs型号原样
  3. 在两种情况下,删除Activity's onDestroy方法上的值。