Ich versuche, ein Datumsauswahlfragment zu starten, wenn der Benutzer auf das Einstellungselement klickt und das ausgewählte Datum in der Zusammenfassung anzeigt.OnPreferenceChangeListener nicht aufgerufen
Der OnPreferenceChangeListener wird jedoch nicht aufgerufen, wenn der Präferenzwert geändert wurde. Ich habe überprüft, dass sich der Wert geändert hat.
Mache ich es falsch? Hier
ist die SettingsFragment
// Configure setting start date
Preference startDatePref = findPreference(getString(R.string.pref_start_date));
startDatePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
DialogFragment startFragment = DatePickerFragment.newInstance(DatePickerFragment.PICK_START);
startFragment.show(((AppCompatActivity) getActivity()).getSupportFragmentManager(), "Pick Start Date of Semester");
return true;
}
});
// Update the summary when date is picked
startDatePref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(newValue.toString());
Log.d("pref change", "called!");
return true;
}
});
Datepicker
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
SharedPreferences pref = getActivity().getSharedPreferences(
getActivity().getString(R.string.date_info_file), Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
if (mType == PICK_START) {
editor.putInt(getString(R.string.start_date_year), year);
editor.putInt(getString(R.string.start_date_month), monthOfYear);
editor.putInt(getString(R.string.start_date_day), dayOfMonth);
UniData.setDataStatus(getActivity(), UniData.START_DATE, true);
// Change the preference used in preferences.xml so that the onChange listener will be called
SharedPreferences defaultPref = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editDefault = defaultPref.edit();
editDefault.putString(getString(R.string.pref_start_date), year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
editDefault.commit();
Log.d(LOG_TAG, "Start Picked: " + year + " " + monthOfYear + " " + dayOfMonth);
}
...
editor.commit();
preferences.xml
<PreferenceCategory
android:key="pref_key_schedule_settings"
android:title="Schedule">
<Preference
android:defaultValue=""
android:key="pref_start_date"
android:summary="For the app to determine odd and even week."
android:title="Set start date of semester"/>
</PreferenceCategory>