Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改首选项';总结_Android_Preferences_Preferenceactivity_Summary - Fatal编程技术网

Android 更改首选项';总结

Android 更改首选项';总结,android,preferences,preferenceactivity,summary,Android,Preferences,Preferenceactivity,Summary,我仍然在寻找一种根据ListPreference的当前值更改其摘要的方法。经过一些研究,我设法使它(部分)工作: 问题是,当我第一次选择一个值时,摘要会更改为其他值,或者根本不会更改。当我第二次选择相同的值时,汇总设置正确。我做错了什么 没有方法激活偏好的行为。您需要使用要设置为摘要的值调用setSummary(),例如使用首选项侦听器 编辑(问题更改后…): 不要使用Preference.OnPreferenceChangeListener,因为它是在新值被持久化(cf)之前调用的,因此是您第

我仍然在寻找一种根据ListPreference的当前值更改其摘要的方法。经过一些研究,我设法使它(部分)工作:


问题是,当我第一次选择一个值时,摘要会更改为其他值,或者根本不会更改。当我第二次选择相同的值时,汇总设置正确。我做错了什么

没有方法激活偏好的行为。您需要使用要设置为摘要的值调用setSummary(),例如使用首选项侦听器

编辑(问题更改后…): 不要使用
Preference.OnPreferenceChangeListener
,因为它是在新值被持久化(cf)之前调用的,因此是您第一次更改首选项值的行为


我建议在
PreferenceFragment
PreferenceActivity
中实现
OnSharedPreferenceChangeListener
。(不要忘记注册和取消注册侦听器。)在完成对首选项的更改后,将调用此侦听器。您还应该在XML中为首选项设置一个默认值。

共享首选项ChangeListener上的SharedReferences的替代方案,用于遗留代码(如果您无法更新所有侦听器,或者不想将SharedReferences与首选项混合使用):

使用Preference.OnPreferenceChangeListener,但不要使用Preference.getEntry(),后者将返回旧值。相反,通过参数newValue获取其新值,在entryValues数组中获取其索引,并在entries数组中按索引获取条目

public OnPreferenceChangeListener prefListener = new OnPreferenceChangeListener() {

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        //Do not use lp.getEntry(), as it returns the old preference value before being changed
        //Read entry corresponding to entryValue newValue.
        ListPreference lPref = (ListPreference)preference;
        String newEntry = (String) lPref.getEntries()[lPref.findIndexOfValue(newValue.toString())];
        //Compose your summary as you need
        preference.setSummary(
            getResources().getString(
                R.string.myPref_summary, newEntry)); 
        return true;    //Persist new value
    }
};

这当然不利于性能,但只要它不会运行很多次,它就可以满足您的需要。

非常感谢,我在我的首选项活动中实现了侦听器,现在它可以正常工作了\m/
public OnPreferenceChangeListener prefListener = new OnPreferenceChangeListener() {

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        //Do not use lp.getEntry(), as it returns the old preference value before being changed
        //Read entry corresponding to entryValue newValue.
        ListPreference lPref = (ListPreference)preference;
        String newEntry = (String) lPref.getEntries()[lPref.findIndexOfValue(newValue.toString())];
        //Compose your summary as you need
        preference.setSummary(
            getResources().getString(
                R.string.myPref_summary, newEntry)); 
        return true;    //Persist new value
    }
};