2 つの NumberPicker を使用してカスタム DialogPreference を作成しました (カスタム クラスの MinuteSecondPicker 内)。2 つの numberPicker の値を選択し、DialogPreference を再度開いたときに、値が復元されません (おそらく保存しないと思います) onSetInitialValue メソッドでは、defaultValue は常に「NULL」です onDialogClosed では、次の 3 つのメソッドを試しました。 persistString(String myValue), shouldCommit および shouldPersist --> すべてが「TRUE」を返します:
public class TimePreference extends DialogPreference {
private int lastMinute = Constante.DEFAULT_WATER_MINUTE; //10
private int lastSecond = Constante.DEFAULT_WATER_SECOND; //00
private MinuteSecondPicker minuteSecondPicker = null;
public static int getMinute(String time) {
String[] pieces=time.split(":");
return(Integer.parseInt(pieces[0]));
}
public static int getSecond(String time) {
String[] pieces=time.split(":");
return(Integer.parseInt(pieces[1]));
}
public TimePreference(Context ctxt, AttributeSet attrs) {
super(ctxt, attrs);
this.setPositiveButtonText(Constante.BT_VALIDER);
this.setNegativeButtonText(Constante.BT_ANNULER);
}
@Override
protected View onCreateDialogView() {
minuteSecondPicker = new MinuteSecondPicker(getContext());
return(minuteSecondPicker);
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
minuteSecondPicker.getMinutePicker().setValue(lastMinute);
minuteSecondPicker.getSecondPicker().setValue(lastSecond);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
lastMinute = minuteSecondPicker.getMinutePicker().getValue();
lastSecond = minuteSecondPicker.getSecondPicker().getValue();
String time = String.valueOf(lastMinute)+":"+String.valueOf(lastSecond);
//Insertion dans la persistence du téléphone
if(callChangeListener(time)){
persistString(time); //Return True
}
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return(a.getString(index));
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
String time = null;
int test = 0;
//recupération des valeurs stockées en persistence du mobile
if (restoreValue) {
if(defaultValue == null){
time = String.valueOf(Constante.DEFAULT_WATER_MINUTE)+":"+String.valueOf(Constante.DEFAULT_WATER_SECOND);
}else{
time = getPersistedString(defaultValue.toString());
}
}else{
time = defaultValue.toString();
}
lastMinute = getMinute(time);
lastSecond = getSecond(time);
}
}
私は多くのことを試しましたが、何も機能しません。アプリケーションを閉じるとすぐに、保存しようとしている設定が失われます。