MultiSelectListPreference が変更されたときに onSharedPreferenceChanged が初めて呼び出されるという問題があります。設定アクティビティを開き、正常に機能する値を変更すると、onSharedPreferenceChanged が呼び出されます。ダイアログを再度開くと、選択された正しいエントリが表示されます。別のエントリを選択し、[OK] をクリックします。onSharedPreferenceChanged が呼び出されるようになりましたが、呼び出されません。ダイアログを再度開くと、エントリが選択されていません。私は何かを見逃していますか、それとも間違ったことをしましたか?
ここに私のpreferences.xmlがあります
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<MultiSelectListPreference
android:key="operations"
android:title="@string/pref_operations"
android:dialogTitle="@string/pref_operations"
android:entries="@array/pref_operations_entries"
android:entryValues="@array/pref_operations_values"
android:defaultValue="@array/pref_operations_default" />
</PreferenceScreen>
そして私の設定の断片
public class SettingsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener
{
public static final String KEY_OPERATIONS_PREFERENCE = "operations";
private MultiSelectListPreference operationsPreference;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
operationsPreference = (MultiSelectListPreference) getPreferenceScreen().findPreference(KEY_OPERATIONS_PREFERENCE);
}
@Override
public void onResume()
{
super.onResume();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
Set<String> operations = operationsPreference.getValues();
String summary = "";
for (String s : operations)
summary += s + " ";
operationsPreference.setSummary(summary);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause()
{
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
if (key.equals(KEY_OPERATIONS_PREFERENCE))
{
Set<String> operations = operationsPreference.getValues();
String summary = "";
for (String s : operations)
summary += s + " ";
operationsPreference.setSummary(summary);
}
}
}