- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个选项类,您可以在其中加载用户的所有首选项。如果 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/
如果我尝试写这个方法 public static void saveDefaultUser() { Editor pName = PreferenceManager
我正在开发一个带有大量可修改首选项的小应用程序,其中大部分是 SeekBarPreferences。 碰巧,因为我对 Android 默认的 SeekBarPreferences 很不满意,所以我使用
我有一个令人沮丧的问题,我已经使用支持库为 Android 创建了自定义首选项。 public class CustomTimePreference extends DialogPreference
鉴于传递给 PreferenceManager.getDefaultSharedPreferences 的任何非空上下文都将返回相同的结果,PreferenceManager 使用的上下文是什么?在不
这是我制作的应用程序类的代码,我用它来保留领域数据库的默认配置,并保留 2 个静态方法来处理 SharedPreferences,其中一个我得到 NullPointerException public
为了使用描述首选项的 XML 文件中的默认值初始化首选项,我可以调用 PreferenceManager.setDefaultValues(this, R.xml.preference, false)
在我的 BackupAgentHelper 中,我需要知道标准首选项文件的名称。我认为“getPreferenceManager().getSharedPreferencesName()”是个好主意,
到目前为止,我的应用程序的 PreferenceActivity 中的“重置为默认值”按钮执行如下操作: SharedPreferences preferences = PreferenceManag
我正在制作一个使用首选项的应用程序,并允许用户选择是否专门只使用 Wifi 进行数据传输。我按照文档 Manage Network Usage但有些说明已被弃用,所以我不得不即兴创作。仍然是示例一部分
我正在使用 PreferenceManager.setDefaultValues(context,R.xml.preferences,false) 在我的应用程序中设置首选项的默认值,我注意到如果我添
我是 Android 单元测试的新手,我想在现有项目中添加一些单元测试。我正在使用 MVP 设计架构。在我的演示者中,我调用了 PreferenceManager 以获得默认的 SharedPrefe
PreferenceManager.getDefaultSharedPreferences(context) 和 getPreferences() 似乎检索不同的首选项。 PreferenceMana
我编写了一个使用Context、第三方库和PreferenceManager 中的SharedPreferences 的类。 可以mock Context,第三方库可以用一些mocking框架来moc
我想从我的首选项 fragment 中获取一个字符串到我的 Android 应用程序中的一个类,但我无法像通常那样获取它。 我类(class)的代码: public class VtplListCon
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 我正在尝试创建一个对讲应用程序,
我收到此异常 Caused by: java.lang.ClassCastException: androidx.preference.PreferenceScreen cannot be cast
我正在尝试从 XML 获取首选项,但不使用 PreferenceActivity。我只想在创建主 Activity 时从文件加载并从首选项中选择一个值。但问题是 toast 是空的(null?)。我有
好的,按照 Udacity Android 开发类(class),我到达了我需要访问保存到名为 pref_general.xml 的 sharedPreferences 文件中的邮政编码的部分,该文件
所以我正在重新制作我几个月前的应用程序(排除错误,并使一些事情变得更好)但是现在我遇到了一个我没有找到也不知道是什么的问题是。如果我“在我的手机上运行该应用程序,它会出现此错误 01-20 22:37
我正在通过 article 学习 Compose . 无状态可组合项是不保持任何状态的可组合项。实现无状态的一个简单方法是使用状态提升,所以我将代码 B 替换为代码 A,太棒了! 文章告诉我: 通过将
我是一名优秀的程序员,十分优秀!