1

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

}

}

私は多くのことを試しましたが、何も機能しません。アプリケーションを閉じるとすぐに、保存しようとしている設定が失われます。

4

1 に答える 1