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

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

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

【问题讨论】:

    标签: android reload sharedpreferences preferenceactivity preference


    【解决方案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 太麻烦了@ 再次。不过,谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多