Начиная с исходных файлов androidx, я перенес пользовательские классы на основе старых DialogPreference на новые androidx.preference.DialogPreference , выполнив следующую процедуру:
Шаг1
Старый пользовательский класс диалога (например, CustomDialogPreference), основанный на устаревшем DialogPreference, должен быть разделен на два отдельных класса:
- Один класс (например, CustomPreference) должен расширяться androidx.preference.DialogPreference и будет содержать только код, связанный с обработкой предпочтений (управление данными).
- Другой класс (например, CustomDialog) должен расширять androidx.preference.PreferenceDialogFragmentCompat и будет содержать толькокод, относящийся к обработке диалогов (пользовательский интерфейс), включая onDialogClosed .Этот класс должен предоставлять статический метод newInstance для возврата экземпляра этого класса.
Шаг 2
В основных настройках обработки фрагментов на основе PreferenceFragmentCompat метод onDisplayPreferenceDialog должен быть переопределен для отображения настраиваемого диалога, например:
private static final String DIALOG_FRAGMENT_TAG = "CustomPreference";
@Override
public void onDisplayPreferenceDialog(Preference preference) {
if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
if (preference instanceof CustomPreference) {
final DialogFragment f = CustomDialog.newInstance(preference.getKey());
f.setTargetFragment(this, 0);
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
} else {
super.onDisplayPreferenceDialog(preference);
}
}