Android 使用SharedPreferenceChangeListener的PreferenceManager的SharedReference默认值
我想创建一个选项类,可以在其中加载用户的所有首选项。如果SharedReference中没有键,那么我希望优先加载xml默认值 问题是,我无法让一个类同时使用带有实现OnSharedPreferenceChangeListener的PreferenceActivity。我不能把钥匙装进去。那么其他应用程序是如何做到这一点的呢?我也尝试过使用PreferenceManager的逗号代码,但没有成功:( 类选项的一些代码Android 使用SharedPreferenceChangeListener的PreferenceManager的SharedReference默认值,android,preferenceactivity,preference,Android,Preferenceactivity,Preference,我想创建一个选项类,可以在其中加载用户的所有首选项。如果SharedReference中没有键,那么我希望优先加载xml默认值 问题是,我无法让一个类同时使用带有实现OnSharedPreferenceChangeListener的PreferenceActivity。我不能把钥匙装进去。那么其他应用程序是如何做到这一点的呢?我也尝试过使用PreferenceManager的逗号代码,但没有成功:( 类选项的一些代码 static SharedPreferences GetSharedPrefe
static SharedPreferences GetSharedPreferences(Context context){
return context.getSharedPreferences("Name", Context.MODE_PRIVATE);
}
public static void ClearSharedPreferences(Context context){
GetSharedPreferences(context).edit().clear().apply();
}
public static void SaveTextSize(Context context, int size){
SharedPreferences sharedPreferences = GetSharedPreferences(context);
if (textSizeKey == null)
textSizeKey = context.getString(R.string.textSizeKey);
sharedPreferences.edit().putInt(textSizeKey, size).commit();
Log.v("Saving", "Text size save: " + size);
}
public static int LoadTextSize(Context context) {
SharedPreferences sharedPreferences = GetSharedPreferences(context);
if (textSizeKey == null)
textSizeKey = context.getString(R.string.textSizeKey);
if (!sharedPreferences.contains(textSizeKey))
Log.i("Load", "Key: " + textSizeKey + " not found");
return sharedPreferences.getInt(textSizeKey, 16);
}
首选项活动的代码
public class SettingsActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
private CheckBoxPreference mCheckBoxPreference;
private ListPreference mListPreference;
private static String updateCheckBoxName;
private static String updateListName;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
updateCheckBoxName = getString(R.string.options_main);
updateListName = getString(R.string.options_toggle);
//PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
//sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences = Options.GetSharedPreferences(this);
mCheckBoxPreference = (CheckBoxPreference) findPreference(updateCheckBoxName);
mListPreference = (ListPreference) findPreference(updateListName);
}
@Override
protected void onResume() {
super.onResume();
updateScreen();
// Set up a listener whenever a key changes
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
private void updateScreen() {
mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(
updateCheckBoxName, false) ? "Will automatic update"
: "No automatic update");
mListPreference.setSummary(mListPreference.getEntry());
}
@Override
protected void onPause() {
super.onPause();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// Hack for dialog
if (preference.equals(getString(R.string.textSizeKey))){
TextSizeAlert textSizeAlert = new TextSizeAlert(SettingsActivity.this) {
@Override
public void SizeCallback(int size) {
Options.SaveTextSize(getApplicationContext(), size);
}
};
textSizeAlert.ShowTextDialog();
return true;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
updateScreen();
}
}
主要活动:
public void SomeMethod() {
int updateTime = Options.LoadUpdateTime(this);
//do something with it
}
弄清楚了,我得用PreferenceManager 因此,在选项中加载首选项管理器
static SharedPreferences GetSharedPreferences(Context context){
//set xml default values if not set.
PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
return PreferenceManager.getDefaultSharedPreferences(context);
}
此外,我还必须将SharedReferences注册和注销连接到上述方法