簡體   English   中英

每個應用程序只有一個共享的首選項對象嗎?

[英]Is there only one shared preferences object per application?

我的問題是:如果我打電話給:

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);
            }
        }
    });

當我在此彈出窗口中選中rememberMe復選框時,它基本上創建了一個具有SharedPreferences設置的彈出窗口,將其關閉並再次打開。 由於某種原因,它沒有被再次檢查,在其他Activity (設置Activity )中,我可以看到此更改也沒有生效。

用於獲取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);

將評論轉換為答案,

你的問題是你還沒有commit您的喜好。 SharedPreference將僅在commit后更新

是的,應用程序上下文的默認共享首選項文件相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM