- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能很难理解,所以请随时提出任何说明
我有一个扩展 PreferenceFragment
并加载默认首选项文件的类:this.addPreferencesFromResource(R.xml.settings);
我有一个显示此 fragment 的 Activity 并监听应用程序首选项的更改以避免用户设置无效值
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { /*do my stuff */ }
Everything is running fine, the user gets a dialog when tries to change to an invalid value and they are not saved to preferences
but I have a problem:
My settings.xml
is something like this:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:defaultValue="5"
android:inputType="number"
android:key="@string/pref_comment"
android:persistent="true"
android:title="@string/comment" />
1-当用户点击任何选项时,会弹出一个对话框(由 android preference api 控制),如果他更改值,它会触发 onSharedPreferenceChanged
并运行我的逻辑
2-当我拒绝用户传递的值并阻止更改时,我向用户显示一个弹出窗口说更改无效,我不保留该值但首选项 Activity 仍然在内部对话框中保留无效值...因此,如果他再次尝试打开相同的选项,将显示无效值。是什么让用户认为值(value)被保存了...
问题是:
有什么方法可以更改 android PreferenceFragment 中内部对话框的内容吗?
最佳答案
您应该为 PreferenceFragment 类实现 Preference.OnPreferenceChangeListener。然后覆盖 onPreferenceChange 方法,如果 newValue 正确则返回 true,否则返回 false。如果您返回 false,则偏好值不会改变。
public class SettingsFragment extends PreferenceFragmentCompat implements
Preference.OnPreferenceChangeListener {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
int number = 0;
try{
number = Integer.parseInt(newValue.toString());
}catch(Exception e){
}
if (number > 0 && number < 10){ //It's an example
return true; // Preference will change
}
return false; // newValue rejected and preference not change
}
}
之后,您必须将此监听器设置为相应的首选项。在 onCreatePreference 中执行。
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.settings);
PreferenceScreen prefScreen = getPreferenceScreen();
Preference editTextPrefernce = prefScreen.findPreference(getString(R.string.pref_key));
if (editTextPrefernce != null && editTextPrefernce instanceof EditTextPreference) {
editTextPrefernce.setOnPreferenceChangeListener(this);
}
}
好好享受吧。
关于Android 更改 PreferenceFragment 的对话框内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51609913/
PreferenceFragment 首选项直到我加载首选项 fragment 后才添加到我的 SharedPreference 映射中。 这是 PreferenceFragment 的预期行为吗?
背景 在以前版本的支持库中,我们可以使用标题来获得设置的主菜单屏幕,每个屏幕都会打开一个新的设置屏幕( fragment )。 问题 现在 header 消失了(如写的 here )一段时间,我认为它
我有一个 PreferenceFragment,我需要在其中添加自定义首选项。现在问题不在于自定义首选项本身,我已经扩展了一些 DialogPreference 创建我自己的首选项,并且我已经处理了保
我需要创建一个settings screen ,其中只有前半部分包含首选项。 我正在考虑添加 PreferenceFragment ,但是我需要支持较旧的设备(最低支持的 API 级别为 9),并且我
我正在创建一个带有主菜单的应用程序,这些菜单项之一将打开一个 PreferenceFragment。为了在应用程序内创建统一性,我希望主菜单看起来尽可能接近 PreferenceFragment。基本
public class MyPrefs extends PreferenceActivity { public static class MyPreferenceFragment exten
在首选项 fragment 中,您可以添加一个图标以显示在首选项的左侧。然而,没有图标的首选项对齐方式很时髦。我如何添加空格以使所有首选项具有相同的对齐方式。我在下面附上了一张图片。 我试过添加 an
当我的小部件添加到主屏幕时,我使用 PreferenceFragment 对其进行配置。用户根据自己的喜好编辑首选项后,如何关闭首选项 fragment ,以便随后可以根据设置添加小部件? 我正在考虑
我想在我的 PreferenceActivity 中获得一个选择文件对话框,我该如何实现?我可以以某种方式覆盖 PreferenceActivity 的 onClick 吗?安卓 API 14。 这是
我正在尝试使用 PreferenceFragment 而不是 PreferenceActivity,因为我不喜欢在我的代码中使用“已弃用”一词。 我已经构建了我的首选项布局和 PreferenceFr
在我的应用程序中,我有偏好:“pref1”,可能的值为 0、1、2。我在 SharedPreferences 类的帮助下保存它们。 我想提供一个用户界面来改变它。我创建类 SettingFragmen
我尝试使用 PreferenceFragment 从 Activity 调用它,当我从 ActionBar 单击一个图标时,我只是调用 FragmentPreferences whit Intent:
我在 Android 中加载 PreferenceFragment 时遇到问题。在这一点上,它是一个非常基本的实现,我想稍后在它工作时对其进行扩展。 问题是导航到 SettingsFragment 后
我又搜索了几个小时,但没有找到我理解/正在寻找的答案。 我有一个首选项屏幕,当用户单击菜单中的设置时它会打开。这行得通。但是,当用户完成设置时,我如何最好地让他关闭此屏幕。 我喜欢 Chrome 中的
我正在开发一个应用程序,我一直在使用支持库 fragment ,我偶然发现了这个问题,我似乎无法使用它添加 PreferencesFragment(用于设置)图书馆? 我找到了一些使用 v7 Pref
如标题所示,我的 PreferenceFragment 与我的工具栏重叠。我已经尝试过不同的解决方案,但问题仍然存在。希望有任何帮助。这是我的代码。 Activity : import android
我有包含左右 fragment 的多 Pane View 。在右边的 fragment 上,我正在启动一个 PreferenceFragment。问题是 fragment 看起来完全扭曲,没有任何风格
我创建了一个包含两个类别和一个复选框的 PreferenceFragment,但是,当我在我的应用程序中显示它时,背景似乎是透明的。 我可以看到主要 Activity 、字段和 PreferenceF
我正在尝试实现“设置”应用的外观,这意味着我正在寻找在类别之间添加分隔线的解决方案。 所以我以为我找到了解决方案,但不幸的是它对我不起作用。正如所建议的那样,我应该在布局中添加空首选项:
我想在我的首选项屏幕底部添加几个按钮,用于设置默认值和恢复默认值。 This答案不包括如何使用 PreferenceFragment 执行此操作。推荐的方法是什么? 加载首选项 fragment 的
我是一名优秀的程序员,十分优秀!