每个应用程序只有一个共享首选项对象吗?

时间:2013-05-08 11:08:58

标签: android settings sharedpreferences

我的问题是:如果我致电:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext())

在我的应用程序中的两个Activities中,它是否指向相同的SharedPreferences文件?

更具体地说,我的rememberMe中有一个SharedPreferences复选框。 我可以从我的应用程序中的两个位置更改。看起来当我在一个位置更改它时,它不会在第二个位置生效。

修改 我有这段代码:

public View createSettingsOverlay(){
    ViewGroup root = (ViewGroup)findViewById(R.id.absoluteOverlay);

    LayoutInflater inflater =  getLayoutInflater();
    View result = inflater.inflate(R.layout.overlay_baloon_settings, root, false);

    ((TextView)result.findViewById(R.id.loginText)).setText(application.getCurrentlyLoggedUser());
    ((TextView)result.findViewById(R.id.passwordText)).setText(application.getCurrenlyLoggedPass());
    ((TextView)result.findViewById(R.id.loginTimeText)).setText(application.getTimeOfLogin().toString());   
    ((TextView)result.findViewById(R.id.settings_popup_server_url)).setText(application.getCurrentUrl());

    //Emil Edit 
    CheckBox rememberMe = (CheckBox)result.findViewById(R.id.cbRememberMe);
    //boolean rememberMePreference = PreferenceManager.getDefaultSharedPreferences(DynamicDataActivity.this).getBoolean(SettingsActivity.REMEMBER_ME_CHECKBOX_KEY, false);
    Log.d(TAG, "Remember Me set in the preference is: " + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(SettingsActivity.REMEMBER_ME_CHECKBOX_KEY, false));

    rememberMe.setChecked(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(SettingsActivity.REMEMBER_ME_CHECKBOX_KEY, false));
    rememberMe.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.d(TAG, "boolean isChecked is: " + isChecked);
            if (isChecked)
            {
                Log.d(TAG, "Remember me checkbox in setting overlay set to True");
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean(SettingsActivity.REMEMBER_ME_CHECKBOX_KEY, true);
                application.setRememberMeChecked(true);
            }
            else
            {
                Log.d(TAG, "Remember me checkbox in setting overlay set to False");
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean(SettingsActivity.REMEMBER_ME_CHECKBOX_KEY, false);
                application.setRememberMeChecked(false);
            }
        }
    });

当我在此弹出窗口中选中SharedPreferences复选框时,基本上创建了一个带有rememberMe设置的弹出窗口,关闭它并再次打开它。出于某种原因,在其他Activity(设置Activity)中没有再次检查,我可以看到此更改也没有生效。

3 个答案:

答案 0 :(得分:1)

使用它来获取SharedPreferences(myPrefs是你的文件):

保存:

SharedPreferences prefs = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("rememberMe", yourState);
editor.commit();

获取:

SharedPreferences prefs = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
boolean state = prefs.getBoolean("rememberMe", state_by_default);

答案 1 :(得分:1)

将评论转换为答案,

您的问题是您没有commit您的偏好。 SharedPreference仅在commit

之后更新

答案 2 :(得分:0)

是的,默认共享pref文件对于Application上下文是相同的。