在 PreferenceActivity on Resume 中重新加载首选项

Posted

技术标签:

【中文标题】在 PreferenceActivity on Resume 中重新加载首选项【英文标题】:Reload Preferences in PreferenceActivity on Resume 【发布时间】:2011-11-19 22:32:52 【问题描述】:

在我的应用程序中,可能会在PreferenceActivity 未打开时更改某些设置,我遇到的一个问题是addPreferencesFromResourceonCreate 中被调用,也就是说,我打开了@987654324 @,然后从那里转到另一个屏幕,然后做一些更改设置的操作,然后按返回键返回到PreferenceActivity,然后布局上的某些设置没有更改。

那么,我怎样才能在每次调用onResume(或onStart())时重新加载所有Preferences而不复制布局?

【问题讨论】:

【参考方案1】:

编辑:此解决方案仅适用于 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();
        

【讨论】:

谢谢。我还没有测试它,但看起来它会工作。我不知道我一直在 PreferenceActivity 和 PreferenceManager 中查找的 recreate() 命令。但是谢谢你,因为这正是我想要的。 我建议您测试逻辑,因为这可能会反复循环,因为 onResume 将在生命周期过程中被调用,并且如果开发人员没有设置首选项或它不存在,那么它将默认为 true 并循环。【参考方案2】:

我遇到了类似的问题。未能找到让我的 PreferenceActivity 自行刷新的简单方法,我的解决方案是将其添加到我的 PreferenceActivity 中:

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

这将导致 Prefs 屏幕在下次启动时从 SharedPreferences 重新加载。不用说,如果您希望能够通过使用后退按钮返回您的偏好设置屏幕,这种方法将不起作用。

【讨论】:

我考虑过,但是我的 PreferenceActivity 启动了其他活动,并且在这些活动中覆盖 onKeyDownonKeyUp 来启动我的 @987654325 太麻烦了@ 再次。不过,谢谢你的建议。

以上是关于在 PreferenceActivity on Resume 中重新加载首选项的主要内容,如果未能解决你的问题,请参考以下文章

在 PreferenceActivity 中启用和禁用选项

Android之设置页面(PreferenceActivity使用)

过时的PreferenceActivity导致Fragment显示问题

PreferenceActivity:将值保存为整数

android中SharedPreferences和PreferenceActivity的存取数据

您如何刷新 PreferenceActivity 以显示设置的更改?