Почему custom DialogPreference не запускается при прослушивании onSharedPreferenceChanged?

Я пытаюсь сделать предпочтение диалога в настройках, когда пользователь просто нажимает кнопку «Добавить» для запуска какого-либо действия. (Очистить базу данных? Нет | Да)

public class MyDialogPreference extends DialogPreference { public MyDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult); } } 

Я действительно не хочу ничего упорствовать, просто запускаю onSharedPreferenceChanged слушателя, поэтому я могу справиться с этим в этой деятельности. Но я не могу понять, как вызвать это

//РЕШЕНИЕ

 @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if(positiveResult) { persistBoolean(!getPersistedBoolean(true)); } Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult); } 

onSharedPreferenceChanged вызывается из-за встроенного обратного вызова, зарегистрированного в sharedpreference , поэтому, если вы не измените ключ, связанный с dialogPreference, вы не получите onSharedPreferenceChanged вызов onSharedPreferenceChanged .

Итак, что вы можете сделать, это когда диалог закрывается, вы можете изменить значение в ключе. Что-то вроде ниже

 text = getPersistedString("1") if(text.length() > 10) text = "1"; persistString(text+"1"); 

Убедитесь, что в диалоговом окне есть ключ и андроид: постоянный как истинный в xml