gpt4 book ai didi

android - 来自 PreferenceManager 的 SharedPreference 默认值与工作 OnSharedPreferenceChangeListener

转载 作者:行者123 更新时间:2023-11-29 18:14:24 25 4
gpt4 key购买 nike

我想制作一个选项类,您可以在其中加载用户的所有首选项。如果 sharedPreference 中没有键,那么我想在 Preference 中加载 xml 默认值。

问题是,我无法让一个类也使用带有实现 OnSharedPreferenceChangeListener 的 PreferenceActivity。而且我无法加载这些 key 。那么其他应用程序是如何做到这一点的呢?我也试过使用 PreferenceManager 的代码,但运气不好 :(

类选项的一些代码

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

Preference Activity 的代码

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

}

主要 Activity :

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

此外,我必须将 sharedPreferences 注册和注销连接到上述方法。

关于android - 来自 PreferenceManager 的 SharedPreference 默认值与工作 OnSharedPreferenceChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com