MultiSelectListPreference onSharedPreferenceChanged在第一次没有调用

时间:2014-03-13 19:15:31

标签: android settings sharedpreferences

我的偏好文件中有一个MultiSelectListPreference:

<PreferenceCategory android:title="TYPES" >
    <MultiSelectListPreference
        android:defaultValue="@array/empty_array"
        android:entries="@array/types"
        android:entryValues="@array/typeValues"
        android:key="types"
        android:title="Types" />
</PreferenceCategory>

然后在代码中:

public class PublicPreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

    PublicPreferenceFragment preference = new PublicPreferenceFragment();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, preference).commit();
    }

   public class PublicPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.publicpreferences);

            for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
                initSummary(getPreferenceScreen().getPreference(i));
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Set up a listener whenever a key changes
        preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // do something
        // this does not get called all the time for MultiSelectListPreference
    }
}

我已经四处搜索,似乎其他人遇到了这个问题,但没有提供解决方法。

我在这里看到一条评论说,SDK中可能存在API 18中的错误,但无法在任何地方确认,并且再次没有解决方法。 Android MultiSelectListPreference uncheck does not fire SharedPreferenceChanged

这是一个错误吗?有解决方法吗?

看起来像一个非常大的错误,所以我觉得我做错了导致这个。

1 个答案:

答案 0 :(得分:0)

我正在处理同样的问题。从SDK 18开始,所有东西似乎都运行良好,但在休息时,我和你一样有同样的问题。

我找到了一个似乎对我有用的解决方案:

MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name");
if (multiSelectListPref != null) {
    multiSelectListPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            MultiSelectListPreference mpreference = (MultiSelectListPreference) preference;
            mpreference.setSummary(newValue.toString());
            mpreference.setValues((Set<String>) newValue);
            return false;
        }
    });
}

也许它对您的案例也很有用