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
Hier die PreferenceActivity
In onDialogClosed der DatePickerP setze ich absichtlich Werte aber es wird kein Event ausgelöst.
Über Hilfe würde ich mich freuen.
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.