在 PreferenceActivity on Resume 中重新加载首选项
Posted
技术标签:
【中文标题】在 PreferenceActivity on Resume 中重新加载首选项【英文标题】:Reload Preferences in PreferenceActivity on Resume 【发布时间】:2011-11-19 22:32:52 【问题描述】:在我的应用程序中,可能会在PreferenceActivity
未打开时更改某些设置,我遇到的一个问题是addPreferencesFromResource
在onCreate
中被调用,也就是说,我打开了@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
启动了其他活动,并且在这些活动中覆盖 onKeyDown
和 onKeyUp
来启动我的 @987654325 太麻烦了@ 再次。不过,谢谢你的建议。以上是关于在 PreferenceActivity on Resume 中重新加载首选项的主要内容,如果未能解决你的问题,请参考以下文章
Android之设置页面(PreferenceActivity使用)
过时的PreferenceActivity导致Fragment显示问题