Custom DatePicker Preferences - OnPreferenceChangeListener

S

stefanT60

Neues Mitglied
0
Hallo zusammen,

also meine eigene DatePicker Preference funktioniert super. Jedoch bekomme ich in meiner Activity kein OnPreferenceChangeListener Event mitgteilt.

Hier die Preference

PHP:
// Die Erweiterung gehört zu diesem Package
package android.preference;

import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.DatePicker;

/**
 * Eine Preference Typ zum auswählen eines Datum
 */
public class DatePickerPreference extends DialogPreference implements
        DatePicker.OnDateChangedListener {

    /**
     * The validation expression for this preference
     */
    private static final String VALIDATION_EXPRESSION = "[0-9]*[0-9]*[0-9]*[0-9]-[0-1]*[0-9]-[0-3]*[0-9]";

    /**
     * Der default Wert für diese Preference. Der Monat 00 entspricht Jan
     */
    private String defaultValue = "1990-00-00";

    /**
     * @param context
     * @param attrs
     */
    public DatePickerPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize();
    }

    /**
     * @param context
     * @param attrs
     * @param defStyle
     */
    public DatePickerPreference(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
        initialize();
    }

    private void initialize() {
        setPersistent(true);
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.preference.DialogPreference#onCreateDialogView()
     */
    @Override
    protected View onCreateDialogView() {

        int y = this.getYear();
        int m = this.getMonth();
        int d = this.getDay();

        DatePicker tp = new DatePicker(getContext());
        if (y == -1)
            tp.init(1990, 01, 01, this);
        else
            tp.init(y, m, d, this);

        return tp;
    }

    /**
     * Sollte eigentlich automatisch aufgerufen werden wenn im XML das attribute
     * android:defaultValue eingetragen ist.
     * 
     * @see android.preference.Preference#setDefaultValue(java.lang.Object)
     */
    @Override
    public void setDefaultValue(Object defaultValue) {

        super.setDefaultValue(defaultValue);

        if (!(defaultValue instanceof String)) {
            return;
        }

        if (!((String) defaultValue).matches(VALIDATION_EXPRESSION)) {
            return;
        }

        this.defaultValue = (String) defaultValue;
    }

    /**
     * Liefert das Jahr im YYYY Format
     * 
     * @return int 0-9999
     */
    private int getYear() {
        String date = getPersistedString(this.defaultValue);

        if (date == null || !date.matches(VALIDATION_EXPRESSION)) {
            return -1;
        }

        return Integer.valueOf(date.split("-")[0]);
    }

    /**
     * Liefert den Monat im MM Format
     * 
     * @return int 0-11
     */
    private int getMonth() {
        String date = getPersistedString(this.defaultValue);

        if (date == null || !date.matches(VALIDATION_EXPRESSION)) {
            return -1;
        }

        return Integer.valueOf(date.split("-")[1]);
    }

    /**
     * Liefert den Tag im DD Format
     * 
     * @return int 1-31
     */
    private int getDay() {
        String date = getPersistedString(this.defaultValue);

        if (date == null || !date.matches(VALIDATION_EXPRESSION)) {
            return -1;
        }

        return Integer.valueOf(date.split("-")[2]);
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {

        persistString(year + "-" + monthOfYear + "-" + dayOfMonth);

    }

    @Override
    public void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);
        if (positiveResult) {            
            // getEditor().
            setTitle(getTitle());
            setSummary(getYear()+"-"+getMonth());
           SharedPreferences.Editor editor = this.getEditor();
           editor.putString(this.getKey(), )
        }
        /*

         */

    }

}


Hier die PreferenceActivity

PHP:
import android.os.Bundle;
import android.preference.DatePickerPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.util.Log;

public class aSettings extends PreferenceActivity {

    /* Debugging */
    private static final String TAG = "aSettings";
    private static final boolean D = true;
    /* */

    /* Preferences */
    final String AGE = "age_preference";

    /* */

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (D)
            Log.i(TAG, "+++ ON CREATE +++");

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.profilpreferences);

        ((DatePickerPreference) findPreference(AGE))
                .setOnPreferenceChangeListener(mChangeListener);

    }

    private OnPreferenceChangeListener mtChangeListener = new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {

            String unit = "";
            if (preference.getKey().equals(AGE)) {
                preference.setSummary(newValue.toString() + " " + unit);
            }

            preference.setSummary(newValue.toString() + " " + unit);

            return false;
        }
    };

}

In onDialogClosed der DatePickerP setze ich absichtlich Werte aber es wird kein Event ausgelöst.

Über Hilfe würde ich mich freuen.
 
Problem selbst gelöst!

PHP:
callChangeListener(year + "-" + monthOfYear + "-" + dayOfMonth);

hat gefehlt
 

Ähnliche Themen

T
Antworten
1
Aufrufe
850
jogimuc
J
T
Antworten
3
Aufrufe
1.067
jogimuc
J
J
Antworten
2
Aufrufe
983
justinh13
J
Zurück
Oben Unten