Android 每个应用程序是否只有一个共享首选项对象?
我的问题是:如果我打电话:Android 每个应用程序是否只有一个共享首选项对象?,android,settings,sharedpreferences,Android,Settings,Sharedpreferences,我的问题是:如果我打电话: PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) 在我的应用程序中的两个不同的活动中,它是否引用相同的共享引用文件 更具体地说,我的SharedReferences中有一个rememberMe复选框。 我可以从应用程序中的两个位置更改它。看起来,当我在一个位置更改它时,它在第二个位置不会生效 编辑: 我有以下代码: public View createSettingsOver
PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
在我的应用程序中的两个不同的活动
中,它是否引用相同的共享引用
文件
更具体地说,我的SharedReferences
中有一个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);
}
}
});
它基本上创建了一个带有设置的弹出窗口,设置来自
SharedReferences
。当我选中此弹出窗口中的rememberMe
复选框时,将其关闭并再次打开。由于某些原因,它没有再次被选中,在其他活动(设置活动)中,我可以看到此更改也没有生效。将此用于获取共享引用(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);
是,应用程序上下文的默认共享pref文件相同。将注释转换为答案
您的问题是您没有提交您的首选项SharedReference
只有在提交后才会更新,但是如果我总是得到默认的SharedReference,它应该引用同一个文件,对吗?是的,它应该引用同一个文件,我想。看起来当我在一个位置更改它时,它在第二个位置不会生效。
你能解释一下吗?@Pragnani,请看更新的问题。你的问题是你没有提交
,SharedReference只有在提交
@Pragnani之后才会更新,愚蠢的我,不知道我怎么会错过它。欢迎您将此添加为答案,以便我可以接受。