1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Custom DatePicker Preferences - OnPreferenceChangeListener

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von stefanT60, 28.07.2010.

  1. stefanT60, 28.07.2010 #1
    stefanT60

    stefanT60 Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    18.05.2010
    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 contextAttributeSet attrs) {
            
    super(contextattrs);
            
    initialize();
        }

        
    /**
         * @param context
         * @param attrs
         * @param defStyle
         */
        
    public DatePickerPreference(Context contextAttributeSet attrs,
                
    int defStyle) {
            
    super(contextattrsdefStyle);
            
    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 (
    == -1)
                
    tp.init(19900101this);
            else
                
    tp.init(ymdthis);

            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 viewint yearint 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);

            ((
    DatePickerPreferencefindPreference(AGE))
                    .
    setOnPreferenceChangeListener(mChangeListener);

        }

        private 
    OnPreferenceChangeListener mtChangeListener = new OnPreferenceChangeListener() {

            @
    Override
            
    public boolean onPreferenceChange(Preference preferenceObject 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.
     
  2. stefanT60, 28.07.2010 #2
    stefanT60

    stefanT60 Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    18.05.2010
    Problem selbst gelöst!

    PHP:
    callChangeListener(year "-" monthOfYear "-" dayOfMonth);
    hat gefehlt
     

Diese Seite empfehlen