2013-05-08 53 views
1

我的問題是:如果我稱之爲:每個應用程序是否只有一個共享首選項對象?

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) 

在兩個不同的Activities在我的應用程序,不是指同一SharedPreferences文件?

更具體地說,我在我的SharedPreferences中有一個rememberMe複選框。 ,我可以從我的應用程序中的兩個位置更改。它看起來像當我在一個位置更改它不會在第二個位置生效。

編輯: 我有這樣的代碼:

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),我可以看到,這種變化也沒有生效。

在此先感謝您的幫助。

+0

更新'看起來像當我在一個位置更改它不會在第二個位置生效.'你能解釋一下嗎? – Pragnani 2013-05-08 11:25:00

+0

@Pragnani,查看更新的問題。 – 2013-05-08 11:33:27

+1

你的問題是你沒有'commit',sharedPreference只會在'commit'後更新。 – Pragnani 2013-05-08 11:38:15

回答

1

轉換評論回答,

你的問題是你有沒有commit您的喜好。 SharedPreference只會在commit

+1

感謝您的幫助人:) – 2013-05-08 11:48:50

+0

@EmilAdz歡迎您的朋友。 – Pragnani 2013-05-08 11:51:07

0

使用此爲獲取SharedPreferences(myPrefs是你的文件):

爲了節省:

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

對於GET:

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

但是如果我總是得到defaultSharedPreferences,它應該引用相同的文件,對吧? – 2013-05-08 11:21:56

+0

是的,我認爲它應該被引用到同一個文件中。 – k0nig 2013-05-08 11:27:39

0

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

相關問題