【问题标题】:SharedPreferences doesn't update preferences immediately. Requires app restartSharedPreferences 不会立即更新首选项。需要重新启动应用程序
【发布时间】:2014-04-20 14:42:01
【问题描述】:

我正在尝试根据用户偏好更新应用布局。做出首选项后,应用程序需要重新启动才能使首选项生效。我希望它立即发生而无需重新启动。这是我的活动课。

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainactivity);
    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());     
    theme  = getPrefs.getString("themelist", "0");
    switch(theme){
    case "0":
        setContentView(R.layout.mainactivity);
        break;
    case "1":
        setContentView(R.layout.mainactivity_black);
        break;
    }       

    initialize();
    setClickListeners();        
}

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案1】:

    通过这种方式,您可以在启动时读取首选项,因为您正在调用 onCreate 中的方法。如果您想在发生更改时做某事,您必须在您的活动中注册一个侦听器并在 onDestroy() 中取消注册它。参见 SharedPreferences 的 registerOnSharedPreferenceChangeListener() 方法。

    【讨论】:

    【解决方案2】:

    它与 MainActivity 的生命周期有关。问题是,当主活动在做出偏好后返回焦点时,不会调用 onCreate() 方法。所以将布局设置移动到 onStart() 或 onResume() 方法解决了我的问题。

    【讨论】:

      【解决方案3】:

      这将对您有所帮助:“MODE_MULTI_PROCESS”

      sharedpreferences = context.getSharedPreferences(Utils.WIDG_PREFC, MODE_MULTI_PROCESS);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 2011-08-11
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        相关资源
        最近更新 更多