我的偏好文件中有一个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
这是一个错误吗?有解决方法吗?
看起来像一个非常大的错误,所以我觉得我做错了导致这个。
答案 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;
}
});
}
也许它对您的案例也很有用