8

在我的应用程序,一些设置可能被改变,而PreferenceActivity是不公开的,我遇到了一个问题,就是addPreferencesFromResource被称为onCreate,所以说,我打开PreferenceActivity,然后从那里转到另一个屏幕,然后执行一些更改设置的操作,然后按返回键返回到PreferenceActivity,然后在布局上某些设置没有更改。刷新首选项PreferenceActivity上的继续

那么,如何在每次调用onResume(或onStart())时重新加载所有Preferences而不重复布局?

回答

3

编辑:该解决方案将用于API只工作11 +。

林不知道我完全理解你的问题,但你可以添加一个调用重建()注入了从我的理解有活动的活动的onResume整个生命周期内着呢。

为了确保只有在实际上存在脏数据时才这样做,我会在SharedPreferences中设置一个标志,让您的活动在onResume()中知道它需要重新创建。

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

谢谢。我还没有测试过,但看起来会起作用。我没有意识到我在PreferenceActivity和PreferenceManager中看到的recreate()命令。但是谢谢你,因为那正是我想要的。 – Jakar

+4

重新创建是API拉特11 – Blundell

+0

我建议你测试出来的逻辑,因为这样会循环一遍又一遍,因为的onResume将在生命周期过程中被调用,如果开发商不设置优先级,或者不存在,比它会默认为true并循环。 –

1

我有类似的问题。未能找到一个简单的方法,使我PreferenceActivity刷新自己,我的解决办法是把它添加到我的PreferenceActivity:

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

这将导致偏好设置屏幕从SharedPreferences未来它启动时重新加载。毋庸置疑,如果您希望能够通过使用后退按钮返回到首选项屏幕,则此方法将不起作用。

+0

我认为,但我的'PreferenceActivity'启动等活动,将刚刚太麻烦了覆盖'onKeyDown'和'onKeyUp'这些活动重新开始我的'PreferenceActivity'。不过谢谢你的建议。 – Jakar

相关问题