gpt4 book ai didi

Android 更改 PreferenceFragment 的对话框内容

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

这可能很难理解,所以请随时提出任何说明

  1. 我有一个扩展 PreferenceFragment 并加载默认首选项文件的类:this.addPreferencesFromResource(R.xml.settings);

  2. 我有一个显示此 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" />

生成的屏幕如下所示: enter image description here

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/

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