2016-03-21 10 views
1

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> 

Antwort

1

Ich hatte ein ähnliches Problem und löste es durch callChangeListener(myNewValue); in meiner benutzerdefinierten Preference Aufruf wie :

Hoffe, dies hilft