Le strict minimum est :
-
MyCustomDialogPreference(Context context, AttributeSet attrs)
constructeur.
- N'oubliez pas d'appeler
super(context, attrs)
.
- Appelez
setPersistent(false)
pour indiquer à la super classe de préférence que vous maintenez la valeur de préférence par vous-même.
- Si vous souhaitez gonfler la mise en page du panneau de dialogue à partir d'une ressource, appelez également la fonction
setDialogLayoutResource(int dialogLayoutResId)
.
-
onBindDialogView(View view)
- mettez à jour la vue avec la ou les valeurs de votre choix.
- N'oubliez pas d'appeler
super.onBindDialogView(view)
.
-
onDialogClosed(boolean positiveResult)
- si positiveResult est vrai, persistez la ou les valeurs de votre vue dans les préférences partagées.
- N'oubliez pas d'appeler
super.onDialogClosed(positiveResult)
.
C'était le strict minimum, et ça le suppose :
- Votre DialogPreference personnalisé gère une seule paire clé/valeur de préférence.
- Vous êtes responsable de la persistance de la valeur de préférence.
- Vous gonflez la mise en page du panneau de dialogue à partir d'une ressource.
Maintenant, quelques options supplémentaires :
(a) Si vous voulez créer la mise en page du panneau de dialogue de manière programmatique, implémentez aussi onCreateDialogView()
au lieu d'appeler setDialogLayoutResource()
dans le constructeur.
(b) Si votre préférence ne prend en charge qu'une seule paire clé/valeur, vous pouvez utiliser les méthodes d'enregistrement d'aide persistBoolean(boolean), persistFloat(float), persistInt(int), persistLong(long), persistString(String)
lorsque vous faites persister la valeur de préférence modifiée dans onDialogClosed(). Sinon, vous devez utiliser la méthode getEditor()
comme suit :
private MyCustomView myView;
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
// the view was created by my custom onCreateDialogView()
myView = (MyCustomView)view;
SharedPreferences sharedPreferences = getSharedPreferences();
myView.setValue1(sharedPreferences.getString(myKey1, myDefaultValue1));
myView.setValue2(sharedPreferences.getString(myKey2, myDefaultValue2));
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
Editor editor = getEditor();
editor.putString(myKey1, myView.getValue1());
editor.putString(myKey2, myView.getValue2());
editor.commit();
}
}
(c) Si vous prévoyez de fournir des valeurs par défaut à partir d'un xml gonflé, vous devez également implémenter la fonction onGetDefaultValue(TypedArray a, int index)
méthode.
@RichardNewton, je sais qu'un mois s'est écoulé depuis que vous avez posé la question. J'espère que vous pouvez encore l'utiliser.