在PreferenceActivity中恢复偏好设置

9
在我的应用程序中,一些设置可能在未打开“PreferenceActivity”时被更改。我遇到的问题是,“addPreferencesFromResource”在“onCreate”中调用,因此,假设我打开了“PreferenceActivity”,然后从那里转到另一个屏幕,然后执行某些更改设置的操作,然后按返回键返回到“PreferenceActivity”,则某些设置在布局上没有更改。
那么,如何在每次调用“onResume”(或“onStart()”)时重新加载所有“Preferences”,而不重复布局呢?
2个回答

3

编辑:此解决方案仅适用于API 11及以上。

我不确定我完全理解您的问题,但是您可以在活动的onResume中添加对recreate()的调用,这样理解来自活动的整个生命周期。

为了确保仅在存在脏数据时执行此操作,我会在SharedPreferences中设置一个标志,让您的活动在onResume()中知道需要重新创建。

    public void onResume(){
            super.onResume();
            SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE);
            if(pref.getBoolean("isDirtyPrefs", true))
                recreate();
        }

谢谢。我还没有测试过,但是看起来会起作用。我之前并不知道recreate()命令,我一直在PreferenceActivity和PreferenceManager中寻找。但是非常感谢,因为这正是我想要的。 - Reed
我建议您测试这个逻辑,因为在生命周期过程中会调用onResume方法,如果开发人员没有设置偏好或者它不存在,则默认为true并进行循环。 - Ray Hunter

1

我曾经遇到过类似的问题。在找不到简单的方法让我的PreferenceActivity刷新自己之后,我的解决方案是将以下代码添加到我的PreferenceActivity中:

/**
 * Called when activity leaves the foreground
 */
protected void onStop() {
    super.onStop();
    finish();
}

这将导致下一次启动时从SharedPreferences重新加载Prefs屏幕。不用说,如果您想通过使用返回按钮返回到首选项屏幕,则此方法将无效。


我考虑过这个问题,但是我的PreferenceActivity会启动其他的活动,如果要在这些活动中重写onKeyDownonKeyUp来再次启动我的PreferenceActivity,那将会非常麻烦。不过还是谢谢你的建议。 - Reed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接