有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

onPreferenceChange方法中的java奇怪值

我有一个带有偏好屏幕的Android应用程序。该屏幕中唯一的首选项是具有四个选项的MultiSelectListPreference。我试图实现onPreferenceChange方法,以便在每次选项更改时更新首选项的摘要

为此,我将newValue对象强制转换为字符串的哈希集,但当我注销哈希集的内容时,它们与用户选择的值不对应

这是我的代码:

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (preference instanceof MultiSelectListPreference) {
        MultiSelectListPreference pref = (MultiSelectListPreference) preference;
        HashSet<String> values = (HashSet<String>) newValue;
        Log.e("SettingsActivity", values.toString());
    }

    return true;
}

这是当我选择所有四个选项时打印出来的日志消息:

07-28 13:13:00.896 31196-31196/com.example.安卓.theguardiannews E/SettingsActivity:
[ film , environment,  business ,  environment , politics, business]

编辑:以下是所有可能选项的图像:

有人知道为什么会这样吗


共 (1) 个答案

  1. # 1 楼答案

    因此,您可以尝试在onPreferenceChange()方法中执行此操作:

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null);
    String[] selected = selections.toArray(new String[] {});
    Toast.makeText(context, selected[all], Toast.LENGTH_LONG).show();
    

    对于更新sumary,只需添加以下行:

    Preference pref = findPreference("pref_key");
    pref.setSummary(selected[all]);
    

    所以代码可能是这样的:

    public boolean onPreferenceChange(Preference preference, Object newValue) {
        SharedPreferences sharedPrefs =   PreferenceManager.getDefaultSharedPreferences(this);
        Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null);
        String[] selected = selections.toArray(new String[] {});
        Preference pref = findPreference("Your_pref_key");
        pref.setSummary(selected[all]);
    
        return true;
    }